这个.unbind和这个。在主干js中的$ el.unbind有什么区别

时间:2015-05-07 13:19:58

标签: javascript backbone.js

我在骨干视图和this.destoryview()方法中绑定了一些事件,我称之为this.unbind()。但这不是解除事件的结果。当一些事件开心时,它被称为有界方法两次。

然后我按this.unbind()更改this.$el.unbind()来电,然后才能正常工作。

events:{
        'click #closeButton' : 'clearSearch',
        // some events
    },

    initialize: function(options){
        this.container = options.container;         
    },

    render: function() {

        if(this.oSearchContext.isAdvancedSearchEnabled() == true)
        {
            this.$el.html(this.advancedSearchSummaryViewTemplate);              
        }
        else
        {
            this.$el.html(this.advancedSearchTemplate);
        }           
        this.container.append(this.$el);
    },

使用this.unbind()

的destroyView方法
destroyView : function()
    {
        if ( this.oAdvancedSearchSummaryView )
            this.oAdvancedSearchSummaryView.destroyView();

        if ( this.oAdvancedSearchDetailsView )
            this.oAdvancedSearchDetailsView.destroyView();

        // unbind all events
        this.unbind();   // this.$el.unbind() working perfectly

        // empty the rendered element
        this.$el.empty();
    }

请告诉我两种方法之间的差异。

2 个答案:

答案 0 :(得分:1)

而不是使用bind我建议使用Backbone' s listenTo

view.listenTo(model, 'change', view.render);

一旦view被销毁,所有绑定将被自动删除(未绑定);

答案 1 :(得分:1)

您使用var { viewFor } = require("sdk/view/core"); var window = getTabContentWindow(viewFor(tab)) (或现代view.bindview.listenTo)来订阅其他骨干组件,例如收听骨干模型中的更改事件。

您使用view.on(或现代view.$el.bind)来收听DOM中的用户互动。

同样的逻辑适用于view.$el.on或现代unbind

类似的语法和API,目的不同。