3

私は自分の問題を理解しましたが、マリオネット/バックボーンをよりよく理解できるように、その理由を知りたいです。

問題以下のコードは、アイテムが削除されたときにビューを更新します。

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.ViewremoveDOM からビューを削除するために呼び出されるメソッドを定義します。最初の例はそのメソッドをオーバーライドします。

名前の衝突removeなどの名前に変更すると、コードは期待どおりに機能します。removeItとにかく、このタイプの状況には2番目のアプローチが望ましいと思います。

于 2013-09-09T15:11:05.423 に答える
3

これに遭遇した人は、Marionette 2.x が itemview を childview に変更したことに注意してください。少しつまずいた。乾杯!

于 2015-03-27T15:27:45.190 に答える