【问题标题】:Delay JSON Feed for jQuery Full Calendar延迟 jQuery 完整日历的 JSON 提要
【发布时间】:2011-04-23 21:09:43
【问题描述】:

我注意到如果您设置了一个事件源(即您将向服务器发出 AJAX 请求)并在下个月开始快速单击,它将触发每个月的请求。因此,如果我快速单击以获取 5 次 5 请求将消失。

我怎样才能让它只有在用户停止点击时才会触发。我发现这样既浪费资源又会导致错误。

【问题讨论】:

  • 在看到它出现之前我从来没有真正想过这个问题,但是这个问题真的很吸引我!

标签: jquery jquery-plugins fullcalendar


【解决方案1】:

您对此完全正确,我已经向开发团队提出了错误。

http://code.google.com/p/fullcalendar/issues/detail?id=920&can=1&sort=-id&colspec=ID%20Type%20Status%20Milestone%20Summary%20Stars

目前我能想到的唯一方法是使用 viewDisaply 事件。

http://arshaw.com/fullcalendar/docs/display/viewDisplay/

在 viewDisapy 事件中调用加载事件

http://arshaw.com/fullcalendar/docs/event_data/loading/

我现在能想到的唯一方法是做一个 javascript setTimeout

var t=setTimeout( FUNCTION , TIME IN MS);

超时检查里面是isLoading,如果为真则再次设置超时。

或者只是在 viewDisplay 函数中使用 setTimeout 到 500 毫秒/1 秒?创建您正在寻找的所需延迟效果,一旦超时,您可以使用 addEventSource 添加所需的源 http://arshaw.com/fullcalendar/docs/event_data/addEventSource/

日历中内置了另一个选项。

http://arshaw.com/fullcalendar/docs/event_data/lazyFetching/

此选项告诉插件缓存所有事件。所以如果你点击下一个/下一个/上一个/上一个。它只调用 ajax 两次。因为前两个月被加载和缓存了。

没有 isClicking :D 这样的东西,因为我们不知道用户是否会再次点击.. :D 所以如果用户在下个月点击两次,我们只需要通过设置 setDelay 来预测这一点1 秒内。

所以如果有人想提前 6 个月去,他们会快速按下下一个按钮,我们可以像这样检测到。

//global var

var clicks = 0;
var isClicking = false;

 //jquery on load and calender initialisation.

 loading: function(bool) { if (bool) 
            { 
                    clicks=0; //The source has loaded completely - user stopped clicking
                    }
            else 
            {
            //Still loading 
            }
        },


 viewDisplay: function(view) {
            click += 1; //user has clicked- and this will grow each time he clicks before the ajax finishes.
            if (click > 1) //Yea he is clicking and clicking.. so lets stop calling ajax.
            {
            $('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx' ); //Remove the source so it stops firing on each click
            setTimeout ( $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx' ); , 1000 ); //Add the source again and it will load and fire loading(true) and reset our click counter
            }

            //Handle other view changes like month/week and date changes
            },          

【讨论】:

  • 你能告诉我这个加载事件在超时后的样子吗?我们是否通过超时延迟了ajax请求?还有一种方法可以监控点击停止的时间。就像如果发生 5 次点击或类似的事情只使用一次。因为我不确定计时器是否是最好的方法。
  • 是的,我实际上注意到您的问题还有其他含义。我知道这不合逻辑,但尝试快速单击月/日/月/日/月/日几次,看看发生了什么;)无论如何 - 今天我将有一些代码来解决你和我的问题,因为我需要解决这个问题我的网站上的问题
  • 你必须做这样的事情来检测用户是否想要提前/推迟几个月。否则使用lazyFetching arshaw.com/fullcalendar/docs/event_data/lazyFetching,它会记住所有已加载的数据,并且不会在缓存的月份请求ajax。我在原始答案中添加了一些代码
  • @ppumkin - 你有这个工作的任何例子吗? .我正在尝试做同样的事情,但我无法得到你的答案
  • 你有小提琴吗?或一些代码。我的回答纯粹是示例,不会仅通过复制和过去起作用。 fullcalendar 如果很脆弱。我可以帮忙,但你需要设置一些环境
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多