如何在backbone.js 中进行轮询?

Posted

技术标签:

【中文标题】如何在backbone.js 中进行轮询?【英文标题】:how to do polling in backbone.js? 【发布时间】:2012-07-30 09:04:36 【问题描述】:

您好,我正在使用backbone.js 开发一个paly2.0 框架应用程序(使用java)。在我的应用程序中,我需要定期从数据库中获取表数据(用于显示即将发生的事件列表的用例以及是否应从列表中删除越过的旧事件)。我正在获取要显示的数据,但是问题是定期访问数据库。为此,我尝试根据这些链接Polling a Collection with Backbone.js、http://kilon.org/blog/2012/02/backbone-poller/ 使用backbone.js 轮询概念。但他们没有轮询来自db 的最新集合。请建议我如何实现这一目标或任何其他替代方案? 谢谢你的建议。

【问题讨论】:

“他们没有从 db 轮询最新集合”是什么意思。 Backbone 将使用您的服务器发送的数据,如果发送的数据不是您期望的数据,问题可能出在服务器端。 感谢您的回复。服务器正在发送数据,我的意思是说我想定期访问数据库,持续时间为 1 分钟 【参考方案1】:

Backbone 没有本地方法可以做到这一点。但是您可以实现长轮询请求,将一些方法添加到您的集合中:

// MyCollection
var MyCollection = Backbone.Collection.extend(
  urlRoot: 'backendUrl',

  longPolling : false,
  intervalMinutes : 2,
  initialize : function()
    _.bindAll(this);
  ,
  startLongPolling : function(intervalMinutes)
    this.longPolling = true;
    if( intervalMinutes )
      this.intervalMinutes = intervalMinutes;
    
    this.executeLongPolling();
  ,
  stopLongPolling : function()
    this.longPolling = false;
  ,
  executeLongPolling : function()
    this.fetch(success : this.onFetch);
  ,
  onFetch : function () 
    if( this.longPolling )
      setTimeout(this.executeLongPolling, 1000 * 60 * this.intervalMinutes); // in order to update the view each N minutes
    
  
);

var collection = new MyCollection();
collection.startLongPolling();
collection.on('reset', function() console.log('Collection fetched'); );

【讨论】:

只是想注意触发您自己的'collectionFetched' 可能是不需要的,因为它已经触发'reset',而且无论如何这将更普遍有用。 我同意,我可以更新它。 :D 感觉是一样的,谢谢!

以上是关于如何在backbone.js 中进行轮询?的主要内容,如果未能解决你的问题,请参考以下文章

将集合绑定到 Backbone.js 中的视图

如何进行backbone.js UI测试

如何开始使用 Backbone.js 和 Rails 3.1

Jquery Draggable 和 Backbone.js 从可放置成功回调内部获取对骨干模型的引用

如何使用Backbone和Node.js / Hapi防止CORB错误?

Backbone.js - 如何在模板中使用自定义模型属性?