在类定义上使用itemId配置(而不是实例化)是一种不好的做法吗?
是否有一些官方文档来支持它?还是只是出于意见考虑?
也许我缺少一些逻辑,这显然证明这是一种不良做法。
Ext.define('SomeApp.view.SomeFolder.MySpecialComponent',{
extend: 'Ext.panel.Panel',
itemId: 'specialComponent'
// ...
});
因为我确实知道,如果存在多个实例,并且将itemId用作选择器,则我将同时获得两个实例。但是,可以说我知道一次不会有超过1个实例,也可以说实例化可以在3个不同的地方进行,我不想在这3个不同的地方添加itemId,我当然不会希望这些itemId有所不同。
那么在类定义中使用itemId配置是否有正式的立场?
从Ext.AbstractComponent.itemId的文档中:
当没有对象引用可用时,itemId可以用作获取对组件的引用的替代方法。与其在Ext.getCmp中使用id,而不是在Ext.container.Container.getComponent中使用itemId,它将检索itemId或id。由于itemId是容器内部MixedCollection的索引,因此itemId的作用域是容器的本地范围-避免与需要唯一ID的Ext.ComponentManager发生潜在冲突。
由于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'
}];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句