up()和down()与Ext.getCmp()

Exp*_* be 26 javascript extjs extjs4 extjs4.1

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

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

例如:

console.log(this.up('panel').up('panel').down('grid'));
console.log(Ext.getCmp('myPanel'));
Run Code Online (Sandbox Code Playgroud)

哪一个更适合表现?

dbr*_*rin 34

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

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

  • 我可以给出一个截然不同的观点:我认为在'id'旁边加上"组件重用"和"具有相同ID的两个组件"这个词是奇怪的 - 它已被多次喊叫,id必须是唯一的.我是关心DOM看起来像什么的人之一所以有很多id和ItemIds只是为了得到ExtJS给出的自动生成的ID.我只是认为使用ExtJS的事实不应该是一个大猩猩风格的DOM. (8认同)
  • 无论如何,鉴于这是接受的答案并且为了其他人的利益,我认为问题的标题应该改为"我应该或不应该使用ExtJS的ID".我的印象是表现是关键问题. (2认同)

Izh*_*aki 15

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

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

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

您只需要记住您可能想要使用的各种情况,up()或者down(),如果存在多个控件的公共处理程序,或者您所使用的组件是由框架自动生成的,那么您就无法给它一个自己.