在FullCalendar中使用两个或多个单独的过滤器过滤事件

时间:2018-07-24 14:48:42

标签: javascript jquery fullcalendar fullcalendar-2

我有fullCalendar中由某些用户和不同客户端所进行的事件列表。我想按用户和客户端进行过滤,以便在单击一个用户时,只会显示其事件。在单击该用户时,我单击一个客户端,日历上仅显示该客户端和该用户的事件。

https://codepen.io/anon/pen/Owmqwe?page=1&

在我的示例中,当我单击Jack和Petco时,将仅显示Jack的Petco客户的事件 。  但是问题是,当我单击Jack然后单击Petco时,将显示所有petco事件。反之亦然,当我单击Petsmart,然后单击Jack时,也是如此。仅应显示Jack的petsmart事件时,才会显示Jacks Petco事件。

我认为问题出在JS的第96行,它与eventRender返回语句有关,我不确定如何解决,我阅读了JQUERY文档,但我仍然没有经验。

eventRender: function(event, element, view) {
          return $('input[type=radio][name=user_selector]:checked').val() === 'all' && $('input[type=radio][name=type_selector]:checked').val() === 'all'
                   || event.client.indexOf($("input[type=radio][name=type_selector]:checked").val()) >= 0
                   || event.user.indexOf($("input[type=radio][name=user_selector]:checked").val()) >= 0;

另一件事:我可以通过事件源数组过滤用户。但是问题是:尽管我的示例是静态数组,但实际上我是从数据库动态获取事件。这意味着我将无法过滤具有新用户的事件,我将不得不不断手动更新代码。 因此,除非有我无法想到的解决方法,否则这对我不起作用。

Filter events by adding and removing multiple event sources

1 个答案:

答案 0 :(得分:1)

&&||的使用不正确。我相信您想要这样的东西:

eventRender: function(event, element, view) {
      return ($('input[type=radio][name=user_selector]:checked').val() === 'all' || event.user.indexOf($("input[type=radio][name=user_selector]:checked").val()) >= 0)
          && ($('input[type=radio][name=type_selector]:checked').val() === 'all' || event.client.indexOf($("input[type=radio][name=type_selector]:checked").val()) >= 0);
    },