在 Backbone/Marionette 中检测对 itemview 容器的点击
Detect click on itemview container in Backbone/Marionette
我有以下项目视图:
return Marionette.ItemView.extend({
template:tpl,
tagName: 'div',
className: 'v_itv_record_type_item',
events:{
'click @ui.item':'itemClicked'
},
ui:{
item:'.v_itv_record_type_item'
},
itemClicked:function(e){
console.log('clicked');
}
});
使用以下车把模板:
<div class="clicktarget">
Stuff Goes Here
</div>
如果您单击这些项目视图之一,它不会注册单击事件。我知道 Backbone 仅限制对 DOM 的视图切片的访问,但显然这不会扩展到包含 div 本身,即使包含 div 的不是任何模板、父视图或其他部分的一部分。
如果我们更改 ui 散列并指向 .clicktarget
处的项目,则点击被注册。但这似乎无缘无故地给了我一个 <div><div>stuff goes here</div></div>
结构。这是检测对整个项目视图 DOM 元素的点击的唯一方法吗?
您可以通过省略选择器在视图元素上注册一个点击事件:
events:{
'click' :'itemClicked'
}
请注意,如果您在视图级别有一个事件处理程序,则视图内的所有点击都会冒泡并触发它的处理程序,除非它在途中被停止(event.stopPropagation())
。这是预期的行为.
我有以下项目视图:
return Marionette.ItemView.extend({
template:tpl,
tagName: 'div',
className: 'v_itv_record_type_item',
events:{
'click @ui.item':'itemClicked'
},
ui:{
item:'.v_itv_record_type_item'
},
itemClicked:function(e){
console.log('clicked');
}
});
使用以下车把模板:
<div class="clicktarget">
Stuff Goes Here
</div>
如果您单击这些项目视图之一,它不会注册单击事件。我知道 Backbone 仅限制对 DOM 的视图切片的访问,但显然这不会扩展到包含 div 本身,即使包含 div 的不是任何模板、父视图或其他部分的一部分。
如果我们更改 ui 散列并指向 .clicktarget
处的项目,则点击被注册。但这似乎无缘无故地给了我一个 <div><div>stuff goes here</div></div>
结构。这是检测对整个项目视图 DOM 元素的点击的唯一方法吗?
您可以通过省略选择器在视图元素上注册一个点击事件:
events:{
'click' :'itemClicked'
}
请注意,如果您在视图级别有一个事件处理程序,则视图内的所有点击都会冒泡并触发它的处理程序,除非它在途中被停止(event.stopPropagation())
。这是预期的行为.