简单地说,每个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();