无法调用undefined的方法'substring'

时间:2011-06-06 15:31:17

标签: extjs tabs portal extjs4

这是我的代码:

Ext.define('Ext.app.Portal', {
    extend: 'Ext.container.Viewport',

    uses: ['Ext.app.PortalPanel', 'Ext.app.PortalColumn', 'Ext.app.GridPortlet', 'Ext.app.ChartPortlet'],

    getTools: function () {
        return [{
            xtype: 'tool',
            type: 'gear',
            handler: function (e, target, panelHeader, tool) {
                var portlet = panelHeader.ownerCt;
                portlet.setLoading('Working...');
                Ext.defer(function () {
                    portlet.setLoading(false);
                }, 2000);
            }
        }];
    },

    initComponent: function () {
        var content = '<div class="portlet-content">' + Ext.example.shortBogusMarkup + '</div>';

        Ext.apply(this, {
            id: 'app-viewport',
            layout: {
                type: 'border',
                padding: '0 5 5 5'
            }, //eo layout
            items: [{ //app-header : item 1 of app-viewport
                id: 'app-header',
                xtype: 'box',
                region: 'north',
                height: 40,
                html: 'My Portal'
            }, { //container : item 2 of app-viewport
                xtype: 'container',
                region: 'center',
                layout: 'border',
                items: [{ //app-options: item 1 of container
                    id: 'app-options',
                    title: 'Options',
                    region: 'west',
                    animCollapse: true,
                    width: 200,
                    minWidth: 150,
                    maxWidth: 400,
                    split: true,
                    collapsible: true,
                    layout: 'accordion',
                    layoutConfig: {
                        animate: true
                    },
                    items: [{ //portal: item 1 of app-options

                        title: 'portal',
                        autoScroll: true,
                        border: false,
                        iconCls: 'nav'
                    }, { //settings : item 2 of app-options
                        title: 'Settings',
                        html: '<div class="portlet-content">' + 'details ??' + '</div>',
                        border: false,
                        autoScroll: true,
                        iconCls: 'settings'
                    }] //eo items app-options
                }, { //item 2 of container    
                    id: 'app-portal',
                    xtype: 'tabpanel',
                    activeTab: 0,
                    region: 'center',
                    items: [{
                        title: 'tab1',
                        layout: 'column',
                        html: 'this is the first tab',
                        closable: true
                    }, {
                        title: 'tab2',
                        closable: true
                    } //eo tab2
                    ] //eo items tabpanel

                }]
            }] //eo   app-portal
        }); //eo apply

        this.callParent(arguments);
    },

    onPortletClose: function (portlet) {
        this.showMsg('"' + portlet.title + '" was removed');
    },

    showMsg: function (msg) {
        var el = Ext.get('app-msg'),
            msgId = Ext.id();

        this.msgId = msgId;
        el.update(msg).show();

        Ext.defer(this.clearMsg, 3000, this, [msgId]);
    },

    clearMsg: function (msgId) {
        if (msgId === this.msgId) {
            Ext.get('app-msg').hide();
        }
    }

});

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:6)

对于其他可能会看到“无法调用未定义的方法'子字符串'的人,当我看到它时,通常是因为找到别名时出现问题。通常是坏xtype。例如,如果我使用xtype: 'img'而不是xtype: 'image'。我通过查看'instantiateByAlias'的堆栈跟踪来调试它,并查看该调用的参数。其中一个是配置中包含有问题的xtype。

答案 1 :(得分:3)

首先......我试图对你的代码进行复制,并将其替换为门户网站示例,...
我没有收到你的错误,没有substring错误,但是我在tabpanel部分出错了...我认为,错误是因为uses配置(这是因为substrin,can在classes.js中找到.. ..

在门户网站示例中,他们使用Ext.app.PortalPanelExt.app.PortalColumnExt.app.GridPortletExt.app.ChartPortlet
但是在你的脚本中你不使用它..只需删除uses部分,
你不需要那个,你只需要tabpanel

第二,请参阅classes.js文件,没有tabpanel定义...
如果你想操纵没有边界的门户..
使用ext-all.js代替ext-core ..

改变这个:

<script type="text/javascript" src="../../builds/ext-core.js"></script>
<script type="text/javascript" src="../shared/examples.js"></script>
<script type="text/javascript" src="classes.js"></script>
<script type="text/javascript" src="portal.js"></script>

到这个

<script type="text/javascript" src="../../bootstrap.js"></script>
<script type="text/javascript" src="../shared/examples.js"></script>
<script type="text/javascript" src="portal.js"></script>

答案 2 :(得分:0)

tats correct通常是一个糟糕的xtype。例如,如果我使用xtype:'img'而不是xtype:'image'。会导致这种情况。