26

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

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

例如:

console.log(this.up('panel').up('panel').down('grid'));
console.log(Ext.getCmp('myPanel'));

哪一个对性能更好?

4

2 回答 2

34

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

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

于 2012-08-08T23:28:39.383 回答
15

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

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

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

您只需要记住您可能想要使用up()or的各种情况down(),例如当有多个控件的通用处理程序时,或者当您所使用的组件由框架自动生成时,您不能给它一个标识自己。

于 2012-08-08T20:57:01.117 回答