6

我有一个关于使用 Extjs 的 update() 方法与直接更新 Ext 元素的 dom 的 innerHTML 的性能、可靠性和最佳实践方法的问题。

考虑以下两个陈述:

Ext.fly('element-id').dom.innerHTML = 'Welcome, Dude!';

Ext.fly('element.id').update('Welcome, Dude!', false);

我不需要eval()任何脚本,而且我确信这update()会考虑到任何浏览器的怪癖。


另外,有谁知道是否使用:

Ext.fly('element-id').dom.innerHTML

是相同的

d.getElementById('element-id').innerHTML

?
浏览器和平台的兼容性很重要,如果两者基本相同,那么Ext.element.dom.innerHTML完全update()放弃可能是我最好的解决方案。

在此先感谢您的帮助,

布赖恩

4

2 回答 2

4

如果您不需要将脚本动态加载到更新的 html 中或在更新后处理回调,那么您概述的两种方法是等效的。中的大部分代码update()添加了脚本加载和回调功能。在内部,它只是简单地设置 innerHTML 来进行内容替换。

Ext.fly().dom返回一个普通的 DOM 节点,所以是的,它相当于getElementById()它指向的节点的结果。唯一需要理解的细微之处是 Ext.fly() 和 Ext.get() 之间的区别。Ext.fly() 返回节点包装对象(享元)的共享实例。因此,如果任何其他代码调用 Ext.fly()(包括内部 Ext 代码),该实例稍后可能会指向幕后的不同节点。因此,调用 Ext.fly() 的结果应该只用于原子操作,而不是作为长期对象重用。 Ext.get().dom另一方面,返回一个新的、唯一的对象实例,从这个意义上说,它更像是 getElementById()。

于 2010-01-22T07:33:22.277 回答
2

我认为您回答了您自己的问题:“浏览器和平台兼容性很重要,如果两者基本相同,那么完全放弃 Ext.element.dom.innerHTML 以使用 update() 可能是我最好的解决方案。” JS 库旨在(部分)抽象浏览器差异;更新就是一个例子。

@bmoeskau 在上面写道, update() 提供了您当前的问题不需要的附加功能。不过,更新是一个不错的选择。

于 2010-01-22T16:59:51.230 回答