2011-11-21 86 views
10

我有在其內部具有的圖(實際上相同的視圖,其遞歸)的圖。我只想要內部視圖來處理來自'a'onclick事件的事件。我試圖通過在選擇器中只指定直接的孩子來做到這一點,但它不起作用。如何僅在Backbone.js事件處理程序中指定兒童?

IV嘗試:

 
events: { 
    'click >a': 'toggle' 
}, 

 
events: { 
    'click > a': 'toggle' 
}, 

,但他們不工作,有什麼建議? (注:做事情喜歡使用標籤和類不會工作,因爲該視圖是遞歸的(意思是,無論是內部和外部具有相同的事件定義)

+0

你能告訴你的衆目睽睽之下,你是如何將其實例化?在Backbone中,jQuery選擇器自動作用於視圖元素,它應該在理論上工作。 –

回答

9

我遇到了同樣的問題,並已通過停止事件的傳播解決它我的孩子視圖。例如...

events: { 
    'click a': 'toggle' 
}, 

toggle: function (e) { 

    // Stop event here. 
    e.stopImmediatePropagation(); 

    // Do more stuff... 

} 

這不回答你的如何指定特定子選擇的問題,但它使事件從傳播給其它處理器。

0

您可能必須指定起始選擇...這意味着我不知道基地選擇假設。

events: { 
    'click #parent > a': 'toggle' 
} 

沒有試過,但它可能工作。

+0

不,家長獲取事件太 – chacham15

+0

很好的瞭解,我想這可能與他們對事件的分析。 – Seth

+0

哦,是不是該事件是在子視圖中生成的,而是傳遞給了父項?我如何過濾掉? – chacham15

1

e.stopImmediatePropagation()是方便,如果你有沒有其他的活動,當您單擊特定元素射擊。你應該做的是將e.currentTarget與你想要選擇的元素進行比較。即

events: { 
    'click a': 'toggle' 
} 

toggle: function(e) { 
    if (e.currentTarget == this.$el.find('a')[0]) { 
     ... 
    } 
} 

這樣一來,如果你有一個父視圖也被點擊鏈接時觸發一個事件,它不會被e.stopImmediatePropagation();停止

相關問題