2015-05-07 73 views
-1

我在骨幹視圖中綁定了一些事件,在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); 
    }, 

destroyView法this.unbind()

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(); 
    } 

能否請您給我解釋一下關於這兩種方法之間differnce。

回答

1

您可以使用view.bind(或現代的view.listenToview.on)訂閱另一個主幹組件,例如在骨幹模型中監聽更改事件。

您可以使用view.$el.bind(或現代view.$el.on)來監聽DOM中的用戶交互。

同樣的邏輯也適用於unbind或現代off

類似的語法和API,不同的目的。

1

而不是使用bind我會建議使用BackbonelistenTo

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

一旦view被破壞,所有的綁定將被自動刪除(unbinded);

+0

綁定事件類似於'click #closeButton':'clearSearch' 在代碼中進行了編輯。 –