我目前使用event_calendar,但更倾向于FullCalendar,因为它允许在给定的一周内添加多个事件时自动高度。
我的当前设置有一个与应用程序中的每个位置相关联的事件日历。因此,当用户加载一个特定的位置时,它自己会呈现与正在查看的位置相关的事件。
我打乱了和实现完整的日历,但想知道,因为url指向/事件,是否有一种方法,只显示与特定位置相关的事件?
现在,所有事件都显示在所有位置日历上。
谢谢!
添加更多细节
这是我当前的事件日历设置,它允许我过滤与每个位置相关的事件
事件模型
belongs_to :location
has_event_calendar
<<p> 位置模型/strong> has_many :events
Location Controller "Show"
def show
@month = (params[:month] || (Time.zone || Time).now.month).to_i
@year = (params[:year] || (Time.zone || Time).now.year).to_i
@shown_month = Date.civil(@year, @month)
@event_strips = @location.events.event_strips_for_month(@shown_month)
end
位置"显示视图"
<div class="span8">
<%= raw(event_calendar) %>
</div>
现在我如何去过滤相同的数据为完整的日历,因为显示为JSON看事件"索引"的数据?
完整日历Javascript
$(document).ready(function() {
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
defaultView: 'month',
height: 500,
// a future calendar might have many sources.
eventSources: [{
url: '/events', // Shows all events BUT need it to show only events to certain location
color: 'yellow',
textColor: 'black',
ignoreTimezone: false
}],
timeFormat: 'h:mm t{ - h:mm t} ',
dragOpacity: "0.5",
);
};
假设您使用事件作为json提要,您可以在url属性中更改包括额外参数以在服务器上过滤
如果你不能在服务器端过滤,你可以使用eventRender在客户端过滤(只是隐藏你不想显示的元素)
从你的编辑它看起来像你想加载所有事件和隐藏一些事件基于选定的位置,所以我认为你应该使用eventRender来过滤事件。如果位置发生了变化,那么调用rerenderEvents(从与已发生变化的控件相关的更改或单击函数中),它将再次调用eventRender并应用已经存在的过滤器。我不认为这会再次调用json feed,但你可能需要验证一下。
...
eventRender: function(event, element) {
if (event.belongs_to !== $('#locationControl').val()) {
$(element).hide();
} else {
// Not sure if you need this
$(element).show();
}
}...
$('#locationControl').change(function () {
$('#calendar').fullCalendar( 'rerenderEvents' )
}):
在我的应用程序中,我在服务器端过滤了事件。
你可以给事件URL传递一个参数,比如locationid。基于该locationid过滤服务器端函数中的事件;返回这些事件