未捕获尝试使用尚未注册的xtype创建组件:

时间:2011-08-01 14:30:00

标签: javascript sencha-touch

我在sencha写了一个程序,运行正常。由于我的文件太大,我试图使用xtypes将它们分成多个小文件。

基本上,我试图让一个main.js文件调用xtype list.js调用另一个xtype details.js也调用所需的xtypes ......

我的问题是,由于我已经开始拆分我的代码,因此收到此错误:Uncaught Attempting to create a component with an xtype that has not been registered

我确信每个文件都在我的index.html中正确链接。

以下是我的代码示例:

Details.js

var details = Ext.extend(Ext.Panel, {
layout: 'card',
cardSwitchAnimation: 'slide',

initComponent: function(){
    Ext.apply(this,{
        items:[]
    })
    details.superclass.initComponent.apply(this,arguments);
}
});
Ext.reg('details', details);

List.js

var Details = {xtype: 'details'};

var ListWrapper = new Ext.Panel({
id: "listwrapper",
layout: 'fit',
items: [List],
dockedItems: [homeTitleBar]
});

var Home = new Ext.Panel({
id: "home",
layout: 'card',
cardSwitchAnimation: 'slide',
items: [ListWrapper, Details]
});

var HomeTab = Ext.extend(Ext.Panel, {
iconCls: 'home',
title: 'Home',
layout: 'card',
initComponent: function() {
    Ext.apply(this,{
        items: [Home]
    }); 
    HomeTab.superclass.initComponent.apply(this,arguments);
}
});
Ext.reg('home', HomeTab);

Main.js

var menuBar = Ext.extend(Ext.TabPanel, {
layout: 'card',
cardSwitchAnimation: 'slide',
fullscreen: true,
tabBar: {
    dock: 'bottom',
    layout: {pack: 'center'}
},
items:[
    {xtype: 'home'}
]
});
Ext.reg("menuBar", menuBar);

1 个答案:

答案 0 :(得分:0)

检查<script>标签的排序。听起来你正在以错误的顺序加载文件(可能是list.js之前的main.js或details.js之前的list.js)。

如果您要重新使用已定义的组件,我也只会使用Ext.reg,在您的情况下,看起来您只是使用它们一次,因此没有太大的收获,您可以直接传入组件而不是冗余的额外Object + xtype