从集合中删除模型会删除View的引用

时间:2012-11-29 15:03:19

标签: javascript backbone.js

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

当我通过模型访问集合并从集合中删除模型时,我遇到了麻烦。问题是在调用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

中创建对模型的局部变量引用

任何建议?

1 个答案:

答案 0 :(得分:0)

问题是编程错误。

调用this.model.collection.remove( this.model );时,在模型上调用了remove事件,该事件绑定到dispose方法,该方法删除了对模型的任何本地引用。因此,对模型的引用丢失了。