2

私は初めてbackbone.jsTodosをいじっています。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が呼び出され、コンソールでエラーは発生しませんが、ビューが更新されません。

私は何が間違っているのですか?

4

3 に答える 3

0

私の最初の推測は、この行は次のとおりです。

Todos.each(this.addOne);

間違っている。あなたはおそらくこのようなものが欲しいでしょう:

Todos.each(_.bind(this.addOne,this));
于 2012-06-09T19:21:42.407 に答える
0

ええ、@ muistooshortが上で尋ねたように、タイマーが更新されていないことをどうやって知るのですか?これを試して

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

うまくいくと思いますsetInterval

于 2012-06-11T06:57:03.470 に答える
0

モデルの変更イベントを手動でトリガーすることにより、それを行う方法を考え出しました。これが機能するのは、ビューのレンダリング関数がによってモデルにバインドされているためです。this.model.bind('change', this.render, this);

(このシナリオでは、はモデルTodosのコレクションですTodo

Todos.each(function (todo) { 
    todo.trigger('change');
});
于 2012-06-14T08:13:56.437 に答える