我正在尝试使用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
组件都可以listenTo
和trigger
事件。有很多内置事件,但没有什么能阻止您实现自己的事件。
这里是一个纯粹由事件驱动的实现解决方案。这具有易于扩展的优势,如果应用程序中每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();
主干轮询器似乎是主干的一个不错的实现。