我第一次搞乱了backbone.js Todos。我正在尝试为每个Todo添加一个计时器,这很好,但是在刷新页面之前计时器不会刷新,我希望它每秒刷新一次。
AppView包含:
window.AppView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'addAll');
Todos.bind('refresh', this.addAll);
Todos.fetch();
},
addAll: function() {
Todos.each(this.addOne);
},
}
所以我想我可以像这样重新加载它:
window.setInterval(function(){
window.Todos.refresh();
}, 1000);
调用addAll,我在控制台上没有错误,但视图没有更新。
我做错了什么?
答案 0 :(得分:0)
我的第一个猜测是这一行:
Todos.each(this.addOne);
不正确。你可能想要这样的东西:
Todos.each(_.bind(this.addOne,this));
答案 1 :(得分:0)
是的,正如@muistooshort上面提到的那样,你怎么知道计时器没有更新?试试这个
window.setInterval(function(){
window.Todos.refresh(); // or .reset() if you've updated backbone.js
console.log('tick');
}, 1000);
我认为你看到setInterval
有效。
答案 2 :(得分:0)
通过手动触发模型的更改事件找出一种方法。这是有效的,因为视图的渲染函数通过this.model.bind('change', this.render, this);
(在此方案中,Todos
是Todo
个模型
Todos.each(function (todo) {
todo.trigger('change');
});