【问题标题】:Fullcalendar: Keep event properties after previous/next clickFullcalendar:在上一次/下一次单击后保留事件属性
【发布时间】:2018-06-20 12:14:14
【问题描述】:

目标:我将 Fullcalendar 与议程周视图一起使用。我需要做的是单击某一周的几个事件(以更改它们的颜色),然后单击下一步转到下一周并选择其他几个事件。

问题:每当我单击“下一个”时,旧事件(前一周形成)正在失去我提供给它们的属性。例如,我更改它们的颜色并添加一个 active 属性(自定义属性以了解当前选择了哪些事件)。这是我的代码

$('#calendar').fullCalendar({
  defaultView: 'agendaWeek',
  header: {
    left: 'prev,next today',
    center: 'title',
    right: 'agendaWeek,agendaDay'
  },
  allDaySlot:false,
  editable: false,
  events: link_here,

  eventClick: function(calEvent, jsEvent, view) {
    if(calEvent.active)
    {

      calEvent.active=false;

      current_lessons= current_lessons.replace(calEvent.class_date+calEvent.class_id+"$",'');
    }

    else
    {
      calEvent.title="clicked";

      calEvent.active=true;
      current_lessons+=calEvent.class_date+calEvent.class_id+"$";
    } 
   if($(this).hasClass('active'))
    $(this).removeClass('active');
  else $(this).addClass('active');

  }
});

活动类用于为元素着色。所以再次发生的事情是事件被着色了,它们获得了一个新的 active 属性设置为 true,然后一旦我点击 next 并返回,所有事件都没有着色并且 active 属性为 false。

我该如何解决这个问题?我搜索了很多,但没有找到我想要的。提前谢谢你。

【问题讨论】:

    标签: jquery html css fullcalendar


    【解决方案1】:

    如果其他人遇到此问题,则该问题的解决方案是 Fullcalendar,当使用从 URL 生成的 JSON 数据时,每次使用 next/previous 转到另一周时,将从 URL 重新获取事件,因此事件属性将被重置。解决方案是实际上有一个事件源数组。我通过进入 javascript 文件并阅读部分代码发现了这一点。用数组试过了,没有出现同样的错误,虽然我在小数组上试过,我会在大数据集上试一下,看看是否成功。

    【讨论】:

    • 我已经在一个大型数据集上尝试过,效果很好:)
    【解决方案2】:

    我在使用全日历时遇到了同样的问题。我注意到如果你调用 renderEvent 方法:

    app.calendarObj.fullCalendar("renderEvent", {
          "start": "someDateTime",
          "end": "otherDateTime"
        });
    

    并且您在此方法中添加 true 作为第二个参数,即使您更改低谷月份,事件也会保留在您的日历上。

    app.calendarObj.fullCalendar("renderEvent", {
          "start": "someDateTime",
          "end": "otherDateTime"
        },true);
    

    【讨论】:

      【解决方案3】:

      修改后尝试强制fullcalendar更新事件:

      this.$("#calendar").fullCalendar('updateEvent', calEvent);
      

      如果问题仍然存在,可能 fullcalendar 没有得到正确的参考。然后,试试这个:

      // get specif event (reference)
      var specificEvent = $('#calendar').fullCalendar('clientEvents', calEvent.id);
      this.$("#calendar").fullCalendar('updateEvent', specificEvent);
      

      【讨论】:

      • 我猜你的意思是 specificEvent 而不是 fullCalendar('updateEvent', >>specificEvent
      • 正如我所说的,我在事件中添加了一个“活动”属性,当单击该属性时,该属性变为真。所以我现在通过 console.log 渲染的 active 属性对其进行了测试。在同一周,每当我点击一个事件时,所有事件的属性都是正确的,当我按下下一个按钮时,所有事件都重置为 false。
      • 我猜这是一个错误,因为一旦我不断点击更改视图,有时它会正常工作(有时是)
      • 我发现了这个问题,我会在下面回答,以防其他人有同样的问题。当事件源为 JSON 时,似乎会发生这种情况。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      相关资源
      最近更新 更多