首页 文章

完整日历过滤器显示的数据可能?

提问于
浏览
0

我目前正在使用event_calendar,但更多地倾向于FullCalendar,因为它允许在给定周内添加多个事件时的自动高度 .

我当前的设置有一个与我的应用程序中的每个位置相关联的事件日历 . 因此,当用户加载特定位置时,它自己呈现与正在查看的位置相关联的事件 .

我已经搞乱并实现了完整日历,但是由于url指向/ events,是否有办法只显示与特定位置相关的事件?

现在,所有事件都显示在所有位置日历上 .

谢谢!

Adding More Detail

这是我当前设置的事件日历,允许我过滤与每个位置相关的事件

Event Model

belongs_to :location
has_event_calendar

Location Model

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

Location "Show View"

<div class="span8">                           
   <%= raw(event_calendar) %>
</div>

现在,如何显示为完整日历过滤相同的数据,因为显示为JSON查看数据的事件“索引”?

Full Calendar 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",

    );
};

2 回答

  • 1

    在我的应用程序中,我在服务器端过滤了事件 .

    您可以将参数传递给事件URL,例如locationid . 根据该locationid过滤服务器端功能中的事件并返回这些事件 .

  • 3

    假设您正在使用events as a json feed,您可以在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' )
    }):
    

相关问题