手动触发 change:attribute

Manually trigger change:attribute

我有一个模型 cell,其属性为 foo。 我有一个绑定到 "change:foo" 的侦听器,如下所示:

cell.listenTo(cell, "change:foo", function(){ 
  if(cell.foo == "bar"){
    doSomething()
  }
});

现在,由于侦听器绑定在 foo 可能已经是 "bar" 的时间点,我想手动触发 change:foo 以便代码 运行,监听器绑定后。由于我的应用程序的限制,我无法提前绑定侦听器。

我发现了一个 Backbone.js 作弊 sheet,它声称我可以使用 cell.change() 为模型的每个属性触发 change:attribute,但这只会产生 Uncaught TypeError: cell.change is not a function。我知道我可以通过调用 cell.trigger("change") 来触发更改事件,但这不会触发 change:foo.

可以 改变我的监听器来监听 "change" 而不是 "change:foo" 但如果可能的话我想坚持使用 "change:foo" 出于性能原因。

您可以将任意字符串传递给 trigger,最显着的是您想要的事件,change:foo

尝试

var cell = new Backbone.Model({
    foo: 'bar'
});
cell.on('change:foo', function() {
    console.log('foo changed', cell.get('foo'));
});
cell.trigger('change:foo');

还有一个演示 http://jsfiddle.net/nikoshr/tk33rme2/