2

在我的应用程序中,我有两个视图共享相同模型的情况。

当我通过模型访问集合并从集合中删除模型时遇到问题。问题是调用后this.model.collection.remove(this.model)视图的引用this.model是未定义的。

我没有在移除之前解除绑定事件的原因是,我需要mySecondView能够了解移除事件,以便从 DOM 中移除它的自身。

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 );一个删除事件,该模型绑定到dispose删除对模型的任何本地引用的方法。因此,对模型的引用丢失了。

于 2012-11-29T16:47:42.290 回答