在backbone.js中定期收听更改

时间:2014-04-20 10:58:03

标签: javascript backbone.js backbone-model

经验:新手

我已经像这样初始化函数

initialize: function(){
        this.listenTo(this.model, "change", this.asyncRender);
    }

我想定期听取更改,例如每5秒

我想要这样的东西

setTimeout(function(){
            this.listenTo(this.model, "change", this.asyncRender);
        }, 5000);

怎么做?

更新

抛出错误updateValues not defined

initialize: function(){
        this.listenTo(this.model, "change", this.asyncRender);
        setInterval(function(){
            this.listenTo(this.model, "change", this.updateValues);
            console.log("3 seconds");
        },3000)
    },

这不是抛出错误

initialize: function(){
        this.listenTo(this.model, "change", this.asyncRender);
        this.listenTo(this.model, "change", this.updateValues);

    },

2 个答案:

答案 0 :(得分:1)

您不必定期听。您只需在初始化中注册一次。如果模型中有任何变化,将调用this.asyncRender。

此处更改表示设置或删除或修改的任何属性。

尝试拨打

this.model.set("title", "A Scandal in Bohemia");

并看到this.asyncRender被调用。

修改 如果要每5分钟手动轮询一次,则可以检查this.model.changed属性。但这不可取。

http://backbonejs.org/#Model-changed

initialize: function() {
  var self = this;
  window.setInterval(function() {
    if (self.model.changed) {
      // Do your stuff
      // this.asyncRender();
    }
  }, 5000);
}

答案 1 :(得分:1)

然后你不必注册model.change事件......

只做

setTimeout(this.asyncRender, 5000);