多个视图绑定到backbone.js中的单个元素
我试图将两个单击事件绑定到两个不同视图中的单个 HTML 元素。其中一个视图触发事件,另一个则不会。
其中一个视图将 body 作为其 el 属性。如果我将此视图的 el 更改为与其他视图相同的元素,则两个事件都会被触发。
这是预期的吗?如何在两个不同视图中绑定同一元素的点击事件?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,这是预期的。 Backbone 使用 jQuery 委托 进行事件绑定。这意味着,事件实际上绑定到视图的 EL,而不是直接绑定到子节点。
当您说“相同的元素”时,您的意思实际上是 DOM 中完全相同的节点吗?或者,您是指具有相同选择器的节点吗?我想我还不太清楚。
Yes, this is expected. Backbone uses jQuery delegates for the event binding. Which means, the event is actually bound to the view's EL, not directly to the child node.
When you say, "the same element", do you mean literally the exact same node in the DOM? Or, do you mean a node with the same selector? I guess I'm not entirely clear.
我可以问为什么你想要将 2 个视图绑定到同一个元素吗?
从我的角度来看,你应该只有 1 个代表元素本身的视图
并且绑定到元素的事件应该仅在该视图中定义。
当您将单击事件绑定到不属于视图的元素时,您会遇到麻烦
如果您通过
delegateEvents
哈希,这些事件包含在视图的el
中。然而,如果您自己定义点击,您的代码将变得更难以管理。
因此,关于您可以做什么:
事件!
您可以定义 1 个视图,按住按钮并在单击按钮时触发事件,而按下该按钮时需要处理某些代码的其他视图不会直接绑定到按钮单击本身,它们可以侦听该引发的事件。
jsfiddle 上的示例:
http://jsfiddle.net/saelfaer/Qck5w/2/
代码中的要点这里:
can i ask why you want to have 2 views binding to the same element?
from my point of view, you should only have 1 view that represents the element itself
and event's bound to an element should be defined in that view only.
you will run into trouble when you are binding click events to elements that don't belong to the view
if you bind trough the
delegateEvents
hash, these events are contained within theel
of the view.if you are however defining the click yourself, your code becomes less managable.
so, on to what you can do:
events!
you can define 1 view, holding your button and trigger an event when the button is clicked, while other views that need to handle some code when that button is pressed don't bind directly to the button click itself, they can listen to that raised event.
example on jsfiddle:
http://jsfiddle.net/saelfaer/Qck5w/2/
the gist of it in code here: