[英]How to prevent multiple even firings with recursive Backbone.js views?
我有一個帶有嵌套列表的應用程序,我正在嘗試使用主干網進行管理。 每個<li>
元素都有一個視圖,但是每個list元素都有自己的嵌套<ul>
標記,該標記具有實例化的自己的視圖。 這是一個例子:
的HTML
<ul class='elements'>
<li class='element'>
<div>
<a class='edit-element'>Edit</a>
</div>
<ul class='elements'>
<li class='element'>
<div>
<a class='edit-element'>Edit</a>
</div>
</li>
</ul>
</li>
</ul>
的JavaScript
element_view = Backbone.view.extend({
events: {
'click .edit-element' : 'edit_element'
},
edit_element : function(event) {
//code to handle editing of an element
}
});
問題是,如果我單擊一個子元素,則兩個視圖都將觸發那里的edit_element事件,這由於多個原因而有問題。 如何構造該結構,以便當我單擊子<li>
的鏈接時,該鏈接針對該<li>
觸發,而不觸發包含該鏈接的任何<li>
?
Backbone的事件處理程序只是普通的舊jQuery事件處理程序,因此您可以使用stopPropagation
以通常的方式停止傳播:
edit_element: function(event) {
event.stopPropagation()
//...
}
演示: http : //jsfiddle.net/ambiguous/Yb8rg/1/
或通過返回false
:
edit_element: function(event) {
//...
return false;
}
除了已經說過的“畝太短”之外,我還可以想到三種解決方法。 按照我個人的偏愛順序:
click .edit-element:first
可能會成功,因為編輯按鈕位於子列表的編輯按鈕之前。 events
集合,而是直接綁定到您感興趣的元素。因此,在呈現子列表之前,請執行this.$(".edit-element").click(_.bind(myClickHandler, this))
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.