绑定到ItemView更改事件

Lor*_*ard 3 javascript backbone.js marionette

我想重新渲染一个列表,使用Marionette.ItemView
相应的模型进行ItemView更改.

有关激活此任务的最佳方法的任何想法?

// Collection passed to Marionette.CompositeView
myCollection.attributes = [
    {
        id: 1,
        name: 'bar'
        closed: false
    },
    ….
];
Run Code Online (Sandbox Code Playgroud)
// Marionette.ItemView
myModel.set({
    closed: true
}); // when this model change I would like to re-render the copositeView 
    // or remove the Marionette.ItemView
Run Code Online (Sandbox Code Playgroud)

PS:
如果我尝试下面的代码(1)Marionette.ItemView,
当我保存模型时,我得到以下错误(2).

(1)

// Marionette.ItemView
initialize: function () {
    this.model.on('change', this.render);
}
Run Code Online (Sandbox Code Playgroud)

(2)

Uncaught TypeError: Object [object Object] has no method 'serializeData'
Run Code Online (Sandbox Code Playgroud)

Bas*_*Ben 17

Marionette提供了一个modelEvents属性,负责与模型事件的正确绑定.

ItemView中,只需添加以下内容即可在模型更改时普遍获得ItemView更新:

'modelEvents': {
    'change': 'render'
},
Run Code Online (Sandbox Code Playgroud)

请享用!


Ton*_*leh 6

要使事件绑定和解除绑定在Marionette中自动工作,您应该使用视图的bindTo方法.例如:

initialize: function() {
  this.bindTo(this.model, 'change', this.render);
}
Run Code Online (Sandbox Code Playgroud)

bindTo正确设置上下文,因此您不需要_.bindAll()它.