【问题标题】:jquery Full Calendar: callback 'after' the calendar has loaded completelyjquery Full Calendar:在日历完全加载后回调
【发布时间】:2012-02-14 05:08:42
【问题描述】:

Adam Shaw 的 jquery 完整日历中是否有在日历完全呈现后调用的回调?我想在该回调中调用 clientEvents 函数以获取客户端的所有事件。我尝试在 viewDisplay 中执行此操作,但在呈现事件之前调用它并且 clientEvents 返回 0 个事件。

【问题讨论】:

  • 任何人.....我被困在这里:(

标签: javascript jquery callback fullcalendar


【解决方案1】:

我知道这篇文章现在已经很老了,但是如果它有任何帮助,您不需要按照 Cheery 的建议修改原始来源(尽管他/她的回答也可以正常工作)。

您也可以只使用已经存在的回调“加载”:

$('#calendar').fullCalendar({
   loading: function(bool) {
      if (bool){
         alert('I am populating the calendar with events');
      }
      else{
         alert('W00t, I have finished!');
         // bind to all your events here
      }
   }
);

【讨论】:

  • 值得注意的是:仅当您的事件需要从某个地方(IE,通过函数调用或 URL)加载时才有效。如果您只是将事件作为 JSON 传递,则加载(至少从 1.5.5 开始)不会触发。
  • 当您调用外部 URL 以在日历上呈现数据时起作用。我能够在检索数据时显示加载 GIF,并在加载后 bool 返回为 false 时使其消失。谢谢你,效果很好!
【解决方案2】:

其实你可以自己添加。像这样更新fullcalendar.js中的函数render

function render(inc) {
    if (!content) {
        initialRender();
        trigger('complete', null, true);
    }else{
        calcSize();
        markSizesDirty();
        markEventsDirty();
        renderView(inc);
        trigger('complete', null, true);
    }
} 

并添加初始调用回调函数:

$('#calendar').fullCalendar({
         editable: true,
         complete: function() {alert('complete');}, 

或者,您可以根据需要访问所有活动

    complete: function() {
        var events = $(this).fullCalendar('clientEvents');
        for(var i in events)
        {
            alert(events[i].title);
        }
    },

【讨论】:

  • 非常感谢您的回复,我会测试并回帖,但我认为这正是我所需要的
  • @khizar 它适用于初始调用,但请检查它的事件更新和其他操作,因为它可能会再次触发 - 我没有深入研究代码。
  • 好的,我的截止日期非常紧迫,我没有时间测试你的解决方案,在我发帖和你的回答之间,我一直在寻找解决方法,并作为一个完全临时的解决方案,当事件完成获取时,我通过在加载选项中调用 clientEvents 来完成我的工作。但我仍然会接受你的答案,因为它在逻辑上看起来非常好:) 并在以后完全测试它。
  • 我可以确认@Cheery 的解决方案有效。 :) 你只需要使用插件的非最小化版本。
  • 我还要说:您无法使用此解决方案访问事件。 :) 如果您需要访问事件,则必须找到另一种方式。
【解决方案3】:

这可能已经过时了,但目前有一个官方回调函数(在 1.6 版中添加):eventAfterAllRender。无需修改源代码。

【讨论】:

  • 使用 eventAfterAllRender,它似乎在每次事件加载时触发。如果你只想要一个火怎么办?
  • 是的,但您可以在第一次运行时进行变量检查。例如:if(hasAlreadyRun) return;
  • 我就是这么做的。只需确保您的变量具有适当的范围,这样它就不仅仅是使用它的函数的本地变量,然后在该函数再次运行之前被销毁。
  • 与外部源 eventAfterAllRender 为每个源触发一次。当所有源都已渲染或一个特定源已完成渲染时,我需要一个回调。我对此很不满意,但我想我必须在eventAfterAllRender 中使用一个计数器来计算我的来源数量,所以我知道一切都已完成渲染。
【解决方案4】:

viewRender 事件就是这个问题的答案;加载仅适用于内容加载。

【讨论】:

    猜你喜欢
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 2020-10-19
    相关资源
    最近更新 更多