Uncaught Ext.AbstractManager.register():注册重复的id

时间:2013-02-05 06:41:00

标签: extjs extjs4 extjs4.1

在下面的应用程序中,我试图动态地将id添加到生成的项目中。我的代码工作正常,但当我在其中添加以下两个注释行。它抛出错误

  

Uncaught Ext.AbstractManager.register():向此经理注册重复ID“73”


当我试图找出错误的来源时,我发现代码工作正常,直到执行81 id(console.log(_idGen))。由此可见,错误与超出范围的异常有关。 (9 * 9 = 81)以及 仅在小提琴中 ,当我向子面板添加HTML文本时,我发现它们介于73 to 81之间??(而不是1 to 81)这让我感到困惑,怎么样?

FIDDLE

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
  });

});

1 个答案:

答案 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]);