从集合中删除模型时,Marionette CollectionView会重新渲染

mls*_*ves 3 backbone.js marionette

我想出了我的问题,但我想知道为什么,这样我(希望)可以更好地理解木偶/骨干.

问题以下代码在删除项目时会更新视图:

var MainView = Marionette.ItemView.extend({
    template: "#sample-template",
    events :{
        "click #remove" : "remove"
    },
    remove: function(){            
        this.trigger("property:remove", this.model);
    }
});
var CollectionView = Marionette.CollectionView.extend({
    itemView: MainView,
    initialize: function(){
        this.on("itemview:property:remove", function(view, model){
            alert(this.collection.length);
            this.collection.remove(model);
            alert(this.collection.length);
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

一个JsFiddle,可以看到它的所有荣耀

修复下面的代码确实按预期更新了视图:

var MainView = Marionette.ItemView.extend({
    template: "#sample-template",
    triggers :{
        "click #remove" : "property:remove"
    },
});

var CollectionView = Marionette.CollectionView.extend({
    itemView: MainView,
    initialize: function(){
        this.on("itemview:property:remove", function(view, model){
            alert(this.collection.length);
            this.collection.remove(view.model);
            alert(this.collection.length);
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

jsFiddle

Chr*_*tta 5

Backbone.View定义一个remove从DOM中删除视图的方法.您的第一个示例将覆盖该方法.

如果重命名removeremoveIt名称冲突消失,代码按预期工作.对于它的价值,我认为第二种方法无论如何都适用于这种情况.