主干网轮询服务器以获取更改,然后重新渲染



我正在尝试使用Backbone从JSON API中提取每日事件,并定期检查JSON中的更改,并重新提交这些更改。此外,该应用程序将长期运行,因此我将定期检查日期,这样,当日期发生变化时,集合的URL也会发生变化,集合将被重新提取和呈现。

然而,当我重新获取数据(无论它是被修改的还是完全是新数据)时,它不会在模型或集合上触发任何更改事件。

我可以粘贴我的代码,但只需简单地问一下就可以节省时间:

轮询服务器以获取新的/修改的数据,然后在视图中添加/删除/更新模型的过程是什么?我不需要对服务器进行任何写入,只需提取内容,并在30秒内轮询更改。

这会是同步吗?取来

我在网上搜索了关于这方面的方法,但随着Backbone API的不断变化,到目前为止我还没能找到一个可行的解决方案。

谢谢你的帮助!

首先:Backbone本身没有从API"定期"获取数据的方法。您需要使用JavaScript 来处理

回答您的每个问题:

Q。轮询服务器以获取新的/修改的数据,然后在视图中添加/删除/更新模型的过程是什么?A.如上所述,你需要通过JS来处理这个问题,比如做

setInterval(function(){
//Make an API call to get data
},30000);

Q。我不需要对服务器进行任何写入,只需提取内容,并在30秒内轮询更改。这会是同步吗?取来

A。我认为主干提取方法是合适的。

每30秒调用一次API:

setInterval(function(){
  collection.fetch();
},30000);

听提取完成并重新呈现您的视图

collection.on('reset',this.render(),this);

希望这能简单地回答你的问题。

感谢

简单地说,每个Backbone组件都可以listenTotrigger事件。有很多内置事件,但没有什么能阻止您实现自己的事件。

这里是一个纯粹由事件驱动的实现解决方案。这具有易于扩展的优势,如果应用程序中每30秒需要发生任何其他事情,只需注册对正确事件的回调即可。

var Data = Backbone.Collection.extend({
  initialize: function() {
    this.listenTo( Backbone, 'tick:30secs', this.fetch, this );
    return this;
  },
  // Example date-dependent url.
  url : function() {
    var date = new Date(); 
    return 'http://server.com/api/' + date.getFullYear() + '-' + date.getDay();
  }
});
var View = Backbone.View.extend({
  // Assuming you store your template in the HTML page.
  template: _.template($('#view-template')),
  initialize: function() {
    this.listenTo( this.collection, 'reset change add', this.render, this );
    setInterval(function() { Backbone.trigger('tick:30secs'); }, 30000);
    return this;
  },
  render: function() {
    this.$el.html( this.template(this.collection.toJSON) );
    return this;
  }
});
// Start everything up.
var collection = new Data(),
    view = new View({ collection: collection });
$('body').append( view.el );
collection.fetch();

主干轮询器似乎是主干的一个不错的实现。

相关内容

  • 没有找到相关文章

最新更新