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

时间:2012-08-08 20:00:58

标签: 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'));

哪一个更适合表现?

2 个答案:

答案 0 :(得分:34)

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

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

答案 1 :(得分:15)

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

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

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

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