Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从集合中删除模型将删除视图';s参考_Javascript_Backbone.js - Fatal编程技术网

Javascript 从集合中删除模型将删除视图';s参考

Javascript 从集合中删除模型将删除视图';s参考,javascript,backbone.js,Javascript,Backbone.js,在我的应用程序中,两个视图共享同一个模型 当我通过模型访问集合并从集合中删除模型时遇到问题。问题是调用this.model.collection.remove(this.model)后,视图的引用this.model未定义 我没有在删除之前解除事件绑定的原因是,我需要mySecondView能够了解删除事件,以便将其自身从DOM中删除 MyView = Backbone.View.extend({ events : { 'click .delete' : deleteM

在我的应用程序中,两个视图共享同一个模型

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


有什么建议吗?

这个问题是编程错误


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

当您创建一个模型时,它会触发一个
destroy
事件,该事件会冒泡到集合中,因此您不需要调用
this.model.collection.remove(this.model)这是一个新模型,它在服务器上不存在,只需要在客户端删除。我在调用
this.destroy
而不是
this.dispose的地方纠正了一个打字错误。