在下面的应用程序中,我试图动态地将id
添加到生成的项目中。我的代码工作正常,但当我在其中添加以下两个注释行。它抛出错误
Uncaught Ext.AbstractManager.register():向此经理注册重复ID“73”
当我试图找出错误的来源时,我发现代码工作正常,直到执行81
id(console.log(_idGen)
)。由此可见,错误与超出范围的异常有关。 (9 * 9 = 81)以及 仅在小提琴中 ,当我向子面板添加HTML文本时,我发现它们介于73 to 81
之间??(而不是1 to 81
)这让我感到困惑,怎么样?
Ext.onReady(function(){
var _idGen = 1;
var childItems = [], items = [];
for (var i = 0; i < 9; i++) {
childItems.length = 0;
for (var j = 0; j < 9; j++) {
childItems.push({
xtype: 'panel',
/****************************/
id: _idGen,
html: _idGen + "",
/****************************/
width: 50,
height: 50,
style: {borderWidth: '1px'}
});
console.log(_idGen);
/*****************************/
_idGen++;
/*****************************/
}
items.push({
xtype: 'panel',
layout: {
type: 'table',
columns: 3
},
items: childItems
});
}
Ext.create('Ext.container.Container', {
layout: {
type: 'table',
// The total column count must be specified here
columns: 3
},
renderTo: Ext.getBody(),
style: {width: '455px',marginLeft: 'auto',marginRight: 'auto', marginTop: '30px'},
items: items
});
});
答案 0 :(得分:4)
如果没有严格要求,请勿使用您的赢家创建Id!
它始终是错误的根源,所以当框架已经开始照顾时,为什么要为此烦恼呢。
使用自定义标识符属性或更好,框架itemId
已经支持的属性。此属性只需在每个组件级别内是唯一的。您还可以使用getComponent('your-item-id')
方法接收嵌套在调用组件中的组件。
我已修改您的示例以使用itemId's
,并在底部为您提供了演示查询
参见 JSFiddle
var _idGen = 1,
_outerIdGen = 1;
var childItems = [], items = [];
for (var i = 0; i < 9; i++) {
// You will keep the same array with and just alter all instances each time.
// This is what causes all your problems and the duplicates!
// childItems.length = 0;
// But you need a new array each time
childItems = [];
for (var j = 0; j < 9; j++) {
childItems.push({
xtype: 'panel',
itemId: 'inner-'+_idGen++,
html: _idGen + "",
width: 50,
height: 50,
style: {margin: '1px',borderColor: 'white',backgroundColor:'cornflowerblue'}
});
}
items.push({
xtype: 'panel',
layout: {
type: 'table',
columns: 3
},
itemId: 'outer-'+_outerIdGen++,
items: childItems
});
}
Ext.create('Ext.container.Container', {
layout: {
type: 'table',
// The total column count must be specified here
columns: 3
},
renderTo: Ext.getBody(),
style: {width: '455px',marginLeft: 'auto',marginRight: 'auto', marginTop: '30px'},
items: items
});
console.log(Ext.ComponentQuery.query('container > panel[itemId=outer-1] > panel[itemId=inner-73]')[0]);