0

内の 1 つの属性に対応する入力テキスト フィールドを変更した後、 内のItemViewすべてのモデルを更新しますCompositeView

更新はモデルで正常に機能しますが、最後に編集された入力テキスト フィールドに対応する ItemView のみが DOM に新しい属性を表示します。メソッドが呼び出される唯一の要素であるためCompositeViewです。onRender

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

内のonRender()すべてで関数を再度呼び出したい。これどうやってするの?ItemViewsCompositeView

4

2 に答える 2

1

この質問に表示される内容を読み、ドキュメントをチェックアウトした後。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()、仕事はします。今、私はその理由を理解したいと思っています。

于 2013-09-13T17:24:38.327 に答える
1

最もエレガントなソリューションではありませんが、ここに行きます

var childViews = compositeView.children._views;
_.each(childViews, function(childView){
    childView.render();
});
于 2013-09-13T03:11:03.627 に答える