【问题标题】:backbone.js - refreshing a collection every second?骨干.js - 每秒刷新一个集合?
【发布时间】:2012-06-09 19:16:09
【问题描述】:

我第一次搞砸了主干.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 被调用,我在控制台上没有收到任何错误,但视图没有更新。

我做错了什么?

【问题讨论】:

  • 您使用的是哪个版本的 Backbone? refresh 在 0.5.0 中重命名为 reset,而我们现在是 0.9.2。你怎么知道你的setInterval 回调没有被触发?
  • @muistooshort 我现在会检查一下,因为我实际上使用的是我从 github 分叉的东西,可能已经过时了
  • 这不是您问题的一部分,但您确实应该使用流控制库。在 setInterval 内执行密集操作很容易使浏览器不堪重负,导致旋转轮甚至浏览器崩溃。见github.com/bishopZ/Frame.jspaulirish.com/2011/requestanimationframe-for-smart-animating

标签: javascript backbone.js


【解决方案1】:

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

Todos.each(this.addOne);

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

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

【讨论】:

  • 没用。无论如何,该代码都带有示例,我唯一添加的是window.setInterval
【解决方案2】:

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

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

我认为您看到 setInterval 有效。

【讨论】:

    【解决方案3】:

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

    (在这种情况下,TodosTodo 模型的集合

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多