与 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 做同样事情的惯用道场?的主要内容,如果未能解决你的问题,请参考以下文章