2

私のアプリケーションでは、同じモデルを共有する 2 つのビューのケースがあります。

モデルを介してコレクションにアクセスし、コレクションからモデルを削除すると問題が発生します。this.model.collection.remove(this.model)問題は、ビューの参照を呼び出した後this.modelが未定義であることです。

削除する前にイベントのバインドを解除しない理由はmySecondView、DOM からそれ自体を削除するために、remove イベントについて知る必要があるからです。

MyView = Backbone.View.extend({

    events : {
        'click .delete' : deleteModel
    }

    initialize : function() {

        this.model.on('remove', this.dispose, this)
    },


    deleteModel : function() {

        if( this.model.isNew() )
        {

            this.model.collection.remove( this.model );

            //remove all the events bound to the model
            this.model.unbind(); //this.model is undefined

            this.dispose();
        }

    }
});


MySecondView = Backbone.View.extend({

    initialize : function() {

        //call the custom dispose method to remove the view
        this.model.on('remove', this.dispose, this );
    }

});

myModel      = new Backbone.Model();    
myCollection = new Backbone.Collection( myModel );

myView       = new MyView({ model : myModel });
mySecondView = new MySecondView({ model : myModel });

機能する唯一の方法は、モデルへのローカル変数参照を作成することですdeleteModel

助言がありますか?

4

1 に答える 1

0

問題はプログラミングのミスでした。

呼び出し時に、モデルへのローカル参照を削除this.model.collection.remove( this.model );するメソッドにバインドされたモデルで remove イベントが呼び出されました。disposeしたがって、モデルへの参照が失われました。

于 2012-11-29T16:47:42.290 に答える