1

我正在构建一个单页 Web 应用程序。我必须动态构建嵌套的 Backbone.View。

通常我会构造一个空的 jQuery,在其中添加 div,完成事件绑定,然后返回那个 jQuery 对象。

我注意到,如果我附加 jQuery 对象而不是附加 object.html(),那么绑定在该对象上的事件将被保留。

我很困惑,这个 jQuery 对象中的事件/回调存储在哪里,以及当我插入一个 jQuery 对象时,这些回调是如何传送到 DOM 树的。

此外,我想知道在什么情况下我必须在 DOM 操作后重新绑定回调。

谢谢你。

4

2 回答 2

0

作为实现细节,绑定到$('some-selector')的事件存储在
$('some-selector').data('events').

并不是说您作为 jQuery 用户需要担心这一点。

于 2013-02-21T01:25:56.967 回答
0

Backbone 事件对象基本上是进行事件绑定的简写。你不能利用它吗?这是一种更标准的方法。您的方法是非标准的,很可能会引起混淆。如果您需要保持动态,您可以使用Backbone 网站上解释的约定附加事件。

如果您移除 DOM 或将其添加回来,您将需要重新绑定事件。根据视图的工作方式,如果模型更改触发视图刷新,您可能需要重新绑定事件。但是,Backbone 事件哈希处理了这一点。

jQuery 确实将事件附加到一个 DOM 节点,.data('events')但是在 1.8 中它会消失(你仍然可以使用它,但它不应该用于调试以外的目的)。您无法正常检查 DOM 中的事件。这使得调试非常困难。如果您使用 jQuery 附加事件,它会使调试更容易,因为您可以使用未缩小的 jQuery 并在它调度事件的位置设置中断。Chrome 也适用于调试事件问题。但理想情况下,您希望在拥有它们之前阻止它们。我希望会有更多的工具出现(比如 PhantomJS 的事件插件,它可以让你监控和调试被测事件)。

于 2013-02-21T02:14:44.050 回答