Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript up()和down()与Ext.getCmp()的比较_Javascript_Extjs_Extjs4_Extjs4.1 - Fatal编程技术网

Javascript up()和down()与Ext.getCmp()的比较

Javascript up()和down()与Ext.getCmp()的比较,javascript,extjs,extjs4,extjs4.1,Javascript,Extjs,Extjs4,Extjs4.1,我很困惑在up()down()和Ext.getCmp(ID)之间我需要为grep对象使用哪一个 对我来说,通过Ext.getCmp('ID')定义对象的ID并检索对象更容易 代码看起来更干净 例如: console.log(this.up('panel').up('panel').down('grid')); console.log(Ext.getCmp('myPanel')); 哪一个性能更好?Ext.getCmp()在内部使用哈希映射,因此它的速度非常快,几乎与基于键检索数组中的值一样快

我很困惑在up()down()和Ext.getCmp(ID)之间我需要为grep对象使用哪一个

对我来说,通过Ext.getCmp('ID')定义对象的ID并检索对象更容易 代码看起来更干净

例如:

console.log(this.up('panel').up('panel').down('grid'));
console.log(Ext.getCmp('myPanel'));
哪一个性能更好?

Ext.getCmp()
在内部使用哈希映射,因此它的速度非常快,几乎与基于键检索数组中的值一样快

.up()
down()
是通过遍历组件层次结构实现的,这是一个较慢的过程

但是
up()
down()
使用选择器,因此它们也可以选择类,而不仅仅是id


您只需要记住,在各种情况下,您可能需要使用
up()
down()
,例如,当有一个用于多个控件的公共处理程序时,或者当您要查找的组件是由框架自动生成的,因此您不能自己给它一个id。

使用IDs和getCmp查找您的组件时存在严重的问题。主要问题是不能安全地重用组件,因为在大多数情况下,标记将创建具有重复ID的HTML元素,这是无效的HTML。此外,当您有两个具有相同ID的组件时,您将遇到难以跟踪的意外行为,因为框架将无法获得对组件的正确引用


这里有几篇博客和论坛帖子,还有一段J.Garcia关于这个话题的视频。建议使用getCmp的方法仅用于调试,切换到其他方法(up、down、refs和)用于生产就绪代码。

我听说使用getCmp不是一个很好的做法,因为如果需要访问对象,应该能够在控制器中轻松地获取它。我意识到有些情况下,这根本不起作用,但我只是说说我所听到的。好吧,无可否认,当使用MVC框架时,您可能会看到
Ext.getCmp()
更少,而更多地使用
refs
及其相应的getter。但我想说的是,这更像是一个造型行业。使用refs的另一个优点是,如果您更改组件的id,只需要在refs中更新它,其中使用
getCmp()
您需要执行代码库搜索-replace.Yep,这就是我听说使用MVC框架更好的另一个原因。我的意思是,如果可以的话,使用它是有意义的,但是就像我说的,有时候你必须使用getCmp。那么,你说Ext.getCmp在Ext JS 4中发光很快,而在Ext JS 3中我应该避免它?不。如果你看一下3.4中的
Ext.getCmp
,你会发现它的速度也很快。我可以给出一个对比的观点:我认为在“id”旁边放上“组件重用”和“具有相同id的两个组件”是很奇怪的——有人多次高呼id必须是唯一的。我是关心DOM外观的人之一,所以有很多ID和ItemID只是为了不获取ExtJS提供的自动生成的ID。我只是认为使用ExtJS并不意味着使用gorilla风格的DOM。无论如何,考虑到这是公认的答案,并且为了其他人的利益,我认为问题的标题应该改为“我是否应该使用ExtJS的ID”。我的印象是,性能是关键问题。伊扎基,我同意你在适当情况下“司法”使用身份证。我自己将它们用于视口组件的核心布局。但是看看这个问题——太多人不理解使用组件ID的含义及其对DOM和应用程序行为的影响。很好!和gz到6K;-)getCmp的性能可能更好。如果要使用getCmp,则应该使用UUID。表演不是一切。