我有一个关于使用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()
可能是我最好的解决方案。
先谢谢你的帮助,
布赖恩
答案 0 :(得分:4)
如果您不需要动态地将脚本加载到更新的html中或在更新后处理回调,那么您概述的两种方法是等效的。 update()
中的大部分代码都添加了脚本加载和回调功能。在内部,它只是设置innerHTML来进行内容替换。
Ext.fly().dom
返回一个普通的DOM节点,所以是的,就它所指向的节点而言,它等同于getElementById()
的结果。要理解的唯一微妙之处是Ext.fly()和Ext.get()之间的区别。 Ext.fly()返回节点包装器对象(flyweight)的共享实例。因此,如果任何其他代码调用Ext.fly(),该实例可能稍后指向幕后的不同节点,包括内部Ext代码。因此,调用Ext.fly()的结果只应用于原子操作,而不能作为长期存在的对象重用。另一方面,Ext.get().dom
返回一个新的,唯一的对象实例,从这个意义上讲,它更像是getElementById()。
答案 1 :(得分:2)
我认为你回答了自己的问题:“浏览器和平台兼容性非常重要,如果两者基本相同,那么完全放弃Ext.element.dom.innerHTML以获得更新()可能是我最好的解决方案。“ JS库(部分)用于抽象浏览器差异;更新就是一个例子。
@bmoeskau在上面写道,update()提供了您当前不需要的其他功能。不过,更新是一个不错的选择。