6

だから私はこのようなビューを持っています。

    //base class
    var SelectListView = Backbone.View.extend({
        initialize: function() {
            _.bindAll(this, 'addOne', 'addAll');
            this.collection.bind('reset', this.addAll);
        },
        addAll: function() {
            this.collection.each(this.addOne);
        },
        events: {
            "change": "changedSelected"
        },
        changedSelected: function() {
            this.selected = $(this.el);
            this.setSelectedId($(this.el).val());
        }

    });

    //my extended view
    var PricingSelectListView = SelectListView.extend({
        addOne: function(item) {
            $(this.el).append(new PricingView({ model: item }).render().el);
        }         
    });

私はこのようなビューをインスタンス化しました...

var products = new ProductPricings();
var pricingsView = new PricingSelectListView({
     el: $("#sel-product"),
     collection: products
});

別の場所 (別のビューのカスタム メソッド) 価格設定ビューのコレクションを更新しました

pricingsView.collection = new ProductPricings(filtered);

これは何もしないように見えます。

pricingsView.render();

そのため、コレクションの項目は少なくなりましたが、DOM で新しいビューがレンダリングまたは更新されることはありません。

どうすればいいですか 1.) DOM のレンダリングを更新しますか? 2.) DOM を自動的に更新しますか? コレクションが変更されるたびにレンダリングするように何らかの方法で指示する必要がありますか?

4

2 に答える 2

4

イベントにバインドaddOne()しましたresetpricingsView.collectionインスタンスを置き換えるだけでは、そのイベントはトリガーaddOne()されず、実行されません。

代わりに試してください:

pricingsView.collection.reset(filtered);
于 2012-01-05T14:13:33.567 に答える
3

コレクションのリセットイベントに既にバインドしているため、これは機能する可能性があります。

pricingsView.collection.reset(filtered);

http://backbonejs.org/#Collection-reset

リセットが発生したときにビューから古いマークアップを削除するために、レンダリング ロジックを微調整する必要があります。

于 2012-01-05T14:13:19.103 に答える