MarionetteJS:在DOM中的“更改”事件后更新CompositeView中的所有ItemView

时间:2013-09-13 02:02:22

标签: javascript backbone.js marionette

在我更改与ItemView中的单个属性相对应的输入文本字段后,我会更新CompositeView中的所有模型。

更新在模型中工作正常,但只有与上次编辑的输入文本字段对应的ItemView才会在DOM中显示新属性,因为它是CompositeView中获取其onRender的唯一元素方法叫做:

   onRender: function() {
        this.$el.html(this.template(this.model.toJSON()));
        return this;
    }

我想在onRender()内的所有ItemViews中再次调用CompositeView功能。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

不是最优雅的解决方案,但这里是

var childViews = compositeView.children._views;
_.each(childViews, function(childView){
    childView.render();
});

答案 1 :(得分:1)

阅读this question中显示的内容后,查看文档。我想我会尝试在change中使用ItemView事件监听器。

myItemView = Backbone.Marionette.ItemView.extend({

    initialize: function() {
        /*bind change event, will get onRender fired when the probability gets updated
        this.model.bind('change', this.onRender);
        error: 'cannot call' Cannot call method 'toJSON' of undefined
        TODO: figure out WHY this is an error but this.render is OK*/

        this.model.bind('change', this.render);
    }

神秘地,onRender()失败了,但是render()完成了这项工作。现在我想弄明白为什么。