与 YAHOO.util.Event.onContentReady 做同样事情的惯用道场?

Posted

技术标签:

【中文标题】与 YAHOO.util.Event.onContentReady 做同样事情的惯用道场?【英文标题】:Idiomatic Dojo that does the same thing as YAHOO.util.Event.onContentReady? 【发布时间】:2011-10-25 16:10:39 【问题描述】:

我想在 DOM 元素可用时立即开始对其进行操作,以尽量减少它以原始状态出现在屏幕上的时间。我知道在 YUI 中你会使用 YAHOO.util.Event.onContentReady 并且我很确定你会在 jQuery 中使用 bind。我是新道场,但我不确定:执行此操作的“道场方式”是什么?

更新:我特别不想等待整个页面(这是荒谬的数据繁重;仅标记可能是 MB 或更多)加载。我想立即开始在 DOM 中查找元素并在它出现后立即开始处理,而无需等待 ALL 标记下载、解析并插入到 DOM 中——这可能需要时间比较长。我想开始查看 DOM 并在这个小片段出现后立即开始工作。鉴于这种限制,dojo.ready 不是很合适吗?我的理解是等待整个DOM准备好,类似于onDOMReady

【问题讨论】:

作为一个注解,相信你想在jQuery中使用ready() (api.jquery.com/ready) $(document).bind('ready', function() /* body here */ );$(document).ready(function() /* body here */ ); 是等价的。 如果您有一个数据密集型和繁重的页面并且您打算做的是附加事件,我认为您需要查看委托类型的模式。有关示例,请参阅 ***.com/questions/5083540/… 这个问题。 【参考方案1】:

在将一段 DOM 添加到树之后,最精确的注入功能的方法是在标记中将需要它的

浏览器可以非常快速地组装 DOM 树。使用 onContentReady 等轮询解决方案时,您必须每隔几毫秒执行一次搜索目标元素的代码,从而减慢页面组装/渲染速度。

我会坚持将您的

我不熟悉dojo的API,所以如果以上没有帮助,我无法回答你关于dojo的具体问题。

(编辑以转义标签中的前导

【讨论】:

这对我来说是有道理的,但就像我说的:我是 Dojo 的新手,我想确保我按照经验丰富的 Dojo 用户所期望的方式做事。只需将其内联在相关标记之后,我就可以了。【参考方案2】:

dojo.addOnLoad。还有一个较新的别名 dojo.ready。

注意:加载时添加还等待确保所有必需的模块都已加载,除了等待 DOM 准备就绪

【讨论】:

谢谢,但我想我不是很清楚。 ready() 不等待加载 DOM 吗?我只关心(可能很重)页面中的一个元素。为了清楚起见,我已经更新了问题(我希望)。 是的,只要可以操作 DOM(并且所有必需的 javascript 模块也已加载),dojo.ready 就会触发。根据文档:“图像和 CSS 文件可能已完成下载,也可能未完成下载调用指定函数时" 感谢您到目前为止的帮助。 addOnLoad 需要下载完整的 html,对吗?这就是我阅读文档的方式。就我的目的而言,这根本是不可接受的。该页面不可缓存,其大小取决于用户输入。我个人看到它仅在标记中超过 3MB,没有图像、css 等。虽然这本身就是一个问题,但现在修复它不在范围内。我需要在 DOM 中出现与给定选择器匹配的元素(在本例中可以是 ID)时立即触发的东西,而 DOM 是否已完全构建并不重要。【参考方案3】:

dojo.addOnLoad() 是你想要的。见documentation。

请注意,对于该方法,dojo.ready() 是 just an alias。

【讨论】:

谢谢,但我想我不是很清楚。 ready() 不等待加载 DOM 吗?我只关心(可能很重)页面中的一个元素。为了清楚起见,我已经更新了问题(我希望)。 missingno 那里有你的答案。

以上是关于与 YAHOO.util.Event.onContentReady 做同样事情的惯用道场?的主要内容,如果未能解决你的问题,请参考以下文章

=与==&与&&| 与 || 的区别

与 0 进行比较与与某个值进行比较是不是更快?

三.工具与市场-债券与债务股票与公司

RESTfulREST 与 RESTful 理解与实践

RESTfulREST 与 RESTful 理解与实践

RESTfulREST 与 RESTful 理解与实践