我很困惑我需要在up()down()和Ext.getCmp(ID)之间使用哪一个grep对象。
对我来说,定义ID以通过Ext.getCmp('ID')来对象和检索对象更容易 并且代码看起来更干净。
例如:
console.log(this.up('panel').up('panel').down('grid'));
console.log(Ext.getCmp('myPanel'));
哪一个更适合表现?
答案 0 :(得分:34)
使用ID和getCmp查找组件存在严重问题。主要问题是您无法安全地重用组件,因为在大多数情况下,标记将创建具有重复ID的HTML元素,这是无效的HTML。此外,当您有两个具有相同ID的组件时,您将遇到难以跟踪的意外行为,因为框架无法获得对组件的正确引用。
有关于此的博客和论坛帖子,以及J. Garcia关于此主题的视频。建议的使用getCmp的方法仅用于调试,切换到其他方法(up,down,refs,itemId和ComponentQuery)以获得生产就绪代码。
答案 1 :(得分:15)
Ext.getCmp()
在内部使用哈希映射,因此它快速点亮,几乎与根据键检索数组中的值一样快。
.up()
和down()
是使用组件层次结构的遍历实现的,这是一个较慢的过程。
但up()
和down()
使用选择器,因此他们也可以选择类,而不仅仅是ID。
您只需要记住在各种情况下,您可能希望使用up()
或down()
,例如,当存在多个控件的公共处理程序时,或者您正在使用的组件时是由框架自动生成的,所以你不能自己给它一个id。