【问题标题】:Where is my YUI 3 instance living? (plus some YUI event observation)我的 YUI 3 实例在哪里? (加上一些 YUI 事件观察)
【发布时间】:2012-02-15 19:42:39
【问题描述】:

这个问题主要是出于学术兴趣。

我今天开始使用 YUI 3 并遇到了它的沙盒概念。在彻底尝试在 DOM 中找到一些对象(比如我注册的事件处理程序)之后,我不得不放弃。我只是找不到任何最终存在的实例对象。

我想我已经涵盖了大部分的闭包:即使沙箱严重依赖它们,也必须在任何地方至少有一个可见的引用,至少对事件处理程序之类的部分(否则没有人可以访问任何东西,甚至闭包都是垃圾)在那种情况下是在某个时间收集的),对吧?

  1. 我在哪里可以找到 DOM 中的 YUI 实例(无需将其分配给全局变量)?
  2. 我能找到吗:沙盒化的 YUI 对象或其中的一部分是否存在于 DOM 中?

举个例子,变得更具体(并且稍微偏离主题): 我有一个带有附加 YUI 小部件和事件的 YUI 节点对象。这些 Node 对象正在包装 DOM 节点。检查 DOM 包装的节点没有任何观察者。

  • 如果 DOM 内部没有任何连接,附加到 Node 对象的事件是如何触发的?

【问题讨论】:

    标签: javascript dom-events yui javascript-framework yui3


    【解决方案1】:

    YUI 3 唯一可见的引用是由 YUI 分配的 YUI 全局对象和偶尔的元素 id。事件订阅是使用原生 addEventListenerattachEvent 进行的,它们不会在标记或 innerHTML 中留下证据。不过,有一些开发人员工具能够显示以这种方式附加的订阅,并且它们会显示 YUI 订阅。

    在 DOM 中找不到 YUI 实例。这就是沙盒的意义所在。 YUI 的实例存在于 JavaScript 层(技术上是 ECMAScript 层),而不是 DOM 层,只存在于闭包中,除非您明确将它们分配给全局可访问的变量或属性或全局可访问的变量。

    【讨论】:

    • 感谢您的回答,这确实为您提供了一些启示!不知道这个 ES 层存在(除了与 window 并行的全局对象,如 DateRegExpeval 等)并且可用于持久化用户内容。认为通过addEventListener 等附加的事件也会最终出现在 DOM 中。如果我没听错的话,这一层只会通过上述对象和addEventListener 之类的东西暴露出来。 总而言之:非全局 YUI 实例仅有效地存在于非 DOM 事件侦听器中?再次感谢 Christian
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    相关资源
    最近更新 更多