簡單地說,每一個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();
來源
2013-08-01 23:37:52
mor
感謝您的快速響應! 其實 - 你的建議是我一直在嘗試。 我在集合視圖中設置了collection.on('reset',function,this)',但是當我調用集合上的提取時它不會運行。 http://pastebin.com/4R9gMZEw - 收集視圖 – watts
你嘗試添加一個成功函數到你的collection.fetch,只是爲了檢查它是否有效?就像collection.fetch({成功:功能(RESP){/ /做smething},錯誤:功能(RESP,狀態){/ /檢查出了什麼問題}}); –
我想你需要通過'{reset:true}'作爲一個選項來獲取你的'setInterval'調用,或者在集合上偵聽'sync'事件。 'collection.on('sync',this.render,this)'..note它應該是'this.render',而不是'this.render()'。 – fbynite