backbone.js:防止模型更改时触发侦听器事件

rov*_*red 2 javascript events model backbone.js

我在视图中有以下监听器来更改模型:

this.listenTo(this.model, 'change', this.render);
Run Code Online (Sandbox Code Playgroud)

当我改变模型时:

model.set('foo', bar);
Run Code Online (Sandbox Code Playgroud)

是否有可能使它不触发此特定函数调用的侦听器事件?我仍然希望事件在其他调用时触发.

mu *_*ort 11

精细手册:

一般来说,称发射事件的函数时(model.set,collection.add,等...),如果你想防止被触发的情况下,你可以通过{silent: true}作为一个选项.请注意,这很少,甚至从来都不是一个好主意.通过选项中的特定标志来查看事件回调以及选择忽略,通常会更好地解决问题.

因此,如果您不希望该特定set调用触发更改事件,则:

model.set('foo', bar, { silent: true });
Run Code Online (Sandbox Code Playgroud)

或者render使用自定义选项将一些信息隧道化:

model.set('foot', bar, { ignore_this: true });
Run Code Online (Sandbox Code Playgroud)

并调整render:

render: function(options) {
    if(options && options.ignore_this)
        return;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • "沉默"的问题在于你并不总是知道谁在听.使用`options`更有针对性. (4认同)
  • 这是一个令人不满意的答案。看起来像是一个肮脏的黑客。骨干网是否那么愚蠢并且没有办法延迟渲染直到几个模型完成更改之后? (2认同)