Backbone.js:如何在更改模型集合时强制View自动刷新

ctr*_*yan 6 backbone.js backbone-events

所以我有一个看起来像这样的视图.

    //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);
        }         
    });
Run Code Online (Sandbox Code Playgroud)

我已经实例化了这样的视图......

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

其他地方(另一种观点自定义方法)我更新了定价视图的集合

pricingsView.collection = new ProductPricings(filtered);
Run Code Online (Sandbox Code Playgroud)

这似乎没有做任何事情.

pricingsView.render();
Run Code Online (Sandbox Code Playgroud)

所以现在集合中的项目较少,但是在DOM中永远不会渲染或刷新新视图.

我该怎么做1.)刷新DOM中的渲染?2.)让它自动刷新DOM?当集合发生变化时,我是否必须以某种方式告诉它渲染?

kub*_*etz 4

您绑定addOne()了一个reset事件。当您仅替换pricingsView.collection实例时,不会触发该事件,也addOne()不会执行该事件。

尝试改为:

pricingsView.collection.reset(filtered);
Run Code Online (Sandbox Code Playgroud)