如何销毁这个 Backbone.js 视图实例?

5
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个回答

6

我对类似问题的回答受到了好评,并且对我很有效。以下是我的destroy_view函数:

(原问题https://dev59.com/qGw15IYBdhLWcg3wfr9y#11534056) 回应:

我必须确保视图不仅从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);

    }

对我来说,这似乎有些过度,但其他方法并没有完全解决问题。


3

不要将实例分配给任何变量(因为backbone中的视图是由事件驱动的,我认为没有必要),在你的toggleCheckFriend方法中删除所有数据和事件,这样实例就可以被垃圾回收。

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

    }

0

这个 View 是否有对应的模型?

如果你想要删除(从数据库中)这个模型,你可以使用:this.model.destroy()

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

请注意,上述的 'this' 指代的是 View 本身,因此你需要使用 _.bindAll(this, 'toggleCheckFriend')


你不需要使用 _.bindAll(this, 'toggleCheckFriend')。DOM事件回调的上下文将自动成为视图。 - Johnny Oshika
@JohnnyO:我主要是为了管道命令而将其放在那里。以防除用户直接触发外,还有其他可以触发它的元素。(例如页面上有一个CheckAllCheckBox) - rkw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接