在类定义(而不是实例化)上使用itemId配置是不好的做法?
是否有一些支持它的官方文档或只是意见问题?
或许有一些我错过的逻辑表明这是一种不好的做法。
Ext.define('SomeApp.view.SomeFolder.MySpecialComponent',{
extend: 'Ext.panel.Panel',
itemId: 'specialComponent'
// ...
});
因为我确实理解如果有多个实例并且我使用itemId作为选择器,我会得到两个实例。但是,让我们说我知道我一次不会有超过1个实例,并且让我们说实例化可能发生在3个不同的地方,我不想添加itemId在这3个不同的地方,我当然不希望那些itemId's不同。
关于在类定义中使用itemId配置是否存在官方态度?
答案 0 :(得分:3)
来自Ext.AbstractComponent.itemId的文档:
当没有对象引用可用时,itemId可用作获取组件引用的替代方法。不要使用带有Ext.getCmp的id,而是使用带有Ext.container.Container.getComponent的itemId,它将检索itemId或id。 由于itemId是容器的内部MixedCollection 的索引,因此itemId在本地范围内限定容器 - 避免与需要唯一ID的Ext.ComponentManager发生潜在冲突。< / p>
由于itemId
用作索引,因此它在容器中必须是唯一的。如果您将具有相同itemId的任何组件的两个实例添加到同一容器中,则第二个实际上会覆盖第一个实例。
您可以在这个小提琴中观察到这种行为:https://fiddle.sencha.com/#fiddle/m2n
特别是考虑到这个事实,在我看来,直接在类定义中指定itemId是没有意义的,因为:
如果不是这种情况,那么您可能要考虑根本不指定itemId。相反,您可以通过其xtype获取实例:
// assuming the xtype is 'specialcomponent'
container.query('specialcomponent')
您实际上在实例化时隐藏了itemId,这使得理解它来自哪里变得更加困难
var ct = Ext.create('Ext.container.Container', {
items: [{
// not clear that this will have itemId 'specialComponent'
xtype: 'specialcomponent'
},{
xtype: 'panel',
itemId: 'somePanel'
}];