2012-09-15 96 views
5

在我的意見我有:骨幹事件不綁定到DOM元素

events: { 
    'click .tab': 'doSomething', 
}, 

則:

doSomething: function(){ 
    ... 
}, 

這是我的觀點的重複結構,但由於某些原因,「DoSomething的'功能沒有被這個視圖中的點擊觸發。

何時將元素綁定到事件?

關於調試的任何提示?

回答

6

代表發生在視圖構造函數末尾的delegateEvents方法期間。

http://documentcloud.github.com/backbone/docs/backbone.html#section-144

嘗試手動調用this.delegateEvents()render返回this之前。您是否在initializerender方法中使用this.el以骨幹網不期待的方式發送?

+1

嗯,我只是嘗試在渲染返回之前調用this.delegateEvents(),但它仍然沒有綁定事件。另外,我並沒有在初始化或渲染中搞亂this.el。唯一有效的工作是調用var that = this;此$( '標籤 ')上(' 點擊',函數(){that.doSomething();});在初始化的內部,但這種感覺像不好的形式... – captDaylight

+0

我沒有搞亂$ el或el,但是將delegateEvents添加到我的渲染器中修復了事件綁定。 – Duke

10

鏈接到這裏撥弄:http://jsfiddle.net/7xRak/

省略選擇器導致事件被綁定到視圖的根元素(this.el)。

如果您class="tab"是視圖,DOM元素意味着this.el那麼你應該綁定事件作爲

events : { 
    'click' : 'dosomething' 
} 

,並像

<div class="tab"> 
    <span class="inner"></span> 
</div> 

this.el內部元件,那麼你應該綁定事件作爲,

events : { 
     'click' : 'dosomething' 
     'click .inner' : 'onInnerClick' 
    } 

文件:http://backbonejs.org/#View-delegateEvents

+2

這正是我上面所展示的,我很清楚這種模式。我想說的是,這種模式由於某種原因不起作用,所以有什麼方法來調試事件委派。 – captDaylight