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

IT技术 javascript extjs extjs4 extjs4.1
2021-03-15 01:57:35

我很困惑我需要将哪一个用于 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个回答

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

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

无论如何,鉴于这是公认的答案并且为了其他人的利益,我认为问题的标题应该更改为“我应该还是不应该在 ExtJS 中使用 ID”。我的印象是性能是关键问题。
2021-04-26 01:57:35
Izhaki,我同意你在适当的情况下对 ID 的“司法”使用。我自己将它们用于视口组件的核心布局。但是看看这个问题 - 太多人不理解使用组件 ID 的含义及其对 DOM 和应用程序行为的影响。
2021-05-02 01:57:35
我可以给出一个相反的观点:我认为将“组件重用”和“具有相同 ID 的两个组件”这两个词放在“id”旁边是很奇怪的——人们已经多次喊出一个 id 必须是唯一的。我是关心 DOM 外观的人之一,因此有很多 id 和 ItemId 只是为了不获取 ExtJS 提供的自动生成的 id。我只是认为使用 ExtJS 的事实不应该意味着大猩猩风格的 DOM。
2021-05-03 01:57:35
好一个!和 gz 到 6K ;-)
2021-05-08 01:57:35

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

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

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

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

好吧,无可否认,当使用 MVC 框架时,您可能会看到越来越少的Ext.getCmp()使用refs及其相应的 getter。但我想说这更像是一项造型业务。使用 refs 的另一个优点是,如果您更改组件的 id,您只需要在 refs 中更新它,您需要在其中进行getCmp()代码库搜索替换。
2021-05-02 01:57:35
所以,你说 Ext.getCmp 在 Ext JS 4 中快速点亮,而在 3 中我应该避免它?sencha.com/forum/…
2021-05-05 01:57:35
是的,这是我听说使用 MVC 框架更好的另一个原因。我的意思是,如果可以的话,使用它是有意义的,但就像我说的,有时你必须使用 getCmp。
2021-05-08 01:57:35
我听说使用 getCmp 不是一个很好的做法,因为如果您需要访问该对象,您应该能够轻松地在控制器中获取它。我意识到在某些情况下这不起作用,但我只是说出我所听到的。
2021-05-12 01:57:35
不,如果你看看Ext.getCmp3.4,你会看到它是非常快的为好。
2021-05-19 01:57:35