我有一个关于使用Extjs的update()方法的性能,可靠性和最佳实践方法的问题,而不是直接更新Ext元素的dom的innerHTML.
考虑两个陈述:
Ext.fly('element-id').dom.innerHTML = 'Welcome, Dude!';
Run Code Online (Sandbox Code Playgroud)
和
Ext.fly('element.id').update('Welcome, Dude!', false);
Run Code Online (Sandbox Code Playgroud)
我不需要eval()任何脚本,我确信这update()会考虑任何浏览器怪癖.
此外,有谁知道如果使用:
Ext.fly('element-id').dom.innerHTML
Run Code Online (Sandbox Code Playgroud)
是相同的
d.getElementById('element-id').innerHTML
Run Code Online (Sandbox Code Playgroud)
?
浏览器和平台兼容性很重要,如果两者基本相同,那么Ext.element.dom.innerHTML完全update()放弃可能是我最好的解决方案.
在此先感谢您的帮助,
布赖恩
如果您不需要将脚本动态加载到更新的 html 中或在更新后处理回调,那么您概述的两种方法是等效的。中的大部分代码update()添加了脚本加载和回调功能。在内部,它只是设置innerHTML 来进行内容替换。
Ext.fly().dom返回一个普通的 DOM 节点,所以是的,它相当于getElementById()它指向的节点的结果。唯一需要理解的微妙之处是 Ext.fly() 和 Ext.get() 之间的区别。Ext.fly() 返回节点包装器对象的共享实例(享元)。因此,如果任何其他代码调用 Ext.fly()(包括内部 Ext 代码),该实例稍后可能会指向幕后的不同节点。因此,调用 Ext.fly() 的结果应该仅用于原子操作,而不应作为长期对象重用。 Ext.get().dom另一方面,返回一个新的、唯一的对象实例,从这个意义上说,它更像 getElementById()。