如何销毁此Backbone.js View实例?

时间:2011-12-04 22:52:16

标签: javascript jquery oop backbone.js

var CheckboxView = Backbone.View.extend({
        tagName:'div',
        template: _.template(item_temp,{}),
        events:{
            'click .checkoff_friend':'toggleCheckFriend',
        },
        initialize: function(){
        },
        render:function(){

        },
        toggleCheckFriend:function(){
            //destroy this View instance. 
        }
    });

var cv = new CheckboxView();

如何销毁实例?当激活切换时,我希望该视图的实例永远消失。

3 个答案:

答案 0 :(得分:6)

我对类似问题的回答很好,对我来说效果很好。这是我的destroy_view函数

(orig。问题https://stackoverflow.com/a/11534056/986832) 响应:

我必须绝对确定视图不仅仅是从DOM中移除,而且还完全不受事件限制。

destroy_view: function() {

    //COMPLETELY UNBIND THE VIEW
    this.undelegateEvents();

    $(this.el).removeData().unbind(); 

    //Remove view from DOM
    this.remove();  
    Backbone.View.prototype.remove.call(this);

    }

对我而言似乎有些过分,但其他方法并没有完全解决问题。

答案 1 :(得分:3)

不要将实例分配给任何变量(我认为没有必要,因为骨干中的视图是由事件驱动的),并且在toggleCheckFriend方法中删除所有数据和事件,这使得实例可用用于垃圾收集。

    toggleCheckFriend:function(){
    $(this.el).removeData().unbind();

    }

答案 2 :(得分:0)

该视图背后是否有模型?

如果您希望删除模型(来自数据库),您可以使用:this.model.destroy()

之后,您可以通过调用this.remove()从DOM中删除View本身。文档提到它相当于$(this.el).remove()

请注意,上面的“this”指的是视图本身,因此您必须_.bindAll(this, 'toggleCheckFriend')