3

我找到了我的问题,但我想知道为什么,这样我可以(希望)更好地理解 Marionette/backbone。

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

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);
        });
    }
});

一个可以看到所有荣耀的 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);
        });
    }
});

jsFiddle

4

2 回答 2

5

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

如果您重命名removeremoveIt名称冲突消失并且代码按预期工作。无论如何,我认为第二种方法更适合这种情况。

于 2013-09-09T15:11:05.423 回答
3

对于遇到这种情况的任何人,请记住 Marionette 2.x 将 itemview 更改为 childview。把我绊倒了一点。干杯!

于 2015-03-27T15:27:45.190 回答