每秒刷新一次集合

refreshing a collection every second?

本文关键字:一次 集合 刷新      更新时间:2023-09-26

我第一次搞砸了骨干.js Todos。我正在尝试为每个 Todo 添加一个计时器,这很好,但是计时器在我刷新页面之前不会刷新,我希望它每秒刷新一次。

应用程序视图包含以下内容:

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 被调用,我在控制台上没有收到任何错误,但视图没有更新。

我做错了什么?

我的第一个猜测是这一行:

Todos.each(this.addOne);

不正确。你可能想要这样的东西:

Todos.each(_.bind(this.addOne,this));

是的,正如上面@muistooshort问的,你怎么知道计时器没有更新什么?试试这个

window.setInterval(function(){ 
  window.Todos.refresh(); // or .reset() if you've updated backbone.js
  console.log('tick');
}, 1000);

我想你看到setInterval有效。

想出一种方法来手动触发模型的更改事件。这是有效的,因为视图的呈现函数通过this.model.bind('change', this.render, this);绑定到模型

(在此方案中,TodosTodo模型的集合

Todos.each(function (todo) { 
    todo.trigger('change');
});