将 Ext.grid.Panel 绑定到 Ext.Panel 时出错

Posted

技术标签:

【中文标题】将 Ext.grid.Panel 绑定到 Ext.Panel 时出错【英文标题】:Error when binding Ext.grid.Panel to Ext.Panel 【发布时间】:2013-11-25 05:17:54 【问题描述】:

我是 extJS 的新手。我想将Ext.grid.Panel 绑定到Ext.Panel(是的,我真的很想要!)。这是我尝试过的-

Var Panel = new Ext.Panel(
    title: 'Test',
    id: 'Panel',
    items: [Grid]
);

Var Grid =

xtype: 'grid',
columns: [
     header: 'Resort', dataIndex: 'resort' ,
     header: 'Arrival', dataIndex: 'arrival' ,
     header: 'Accompanying Guest(s)', dataIndex: 'guest', flex: 1 
]
;

现在我想在Ext.Window 中打开Panel

var win2 = new Ext.Window(
                    layout: 'fit',
                    width: 900,
                    height: 600,
                    closeAction: 'hide',
                    plain: true,
                    items: [Panel]                        
                );
                b.getEl().on('click', function () 
                    win2.show();
                );

这以错误结束 - Uncaught TypeError: Cannot read property 'events' of undefined

但是当我如下更改Panel 时,它的工作正常-

var Panel = new Ext.Panel(
    title: 'Test',
    id: 'Panel',
    items:
        [
            
                xtype: 'grid',
                columns: [
                         header: 'Resort', dataIndex: 'resort' ,
                         header: 'Arrival', dataIndex: 'arrival' ,
                         header: 'Accompanying Guest(s)', dataIndex: 'guest', flex: 1 
                ]
            
        ]
);

我之前的代码出了什么问题?

【问题讨论】:

【参考方案1】:

当然不行。您实际上是在这样做:

var y = x + 1;
console.log(y); // Why isn't y 2?
var x = 1;

【讨论】:

好的,我同意,但是如果Grid 在另一个.js file 中呢? 没什么区别,不能乱序运行代码。 好的,我还有 1 个问题 1. var Grid = xtype: 'grid',....var Grid = Ext.create('Ext.grid.Panel', ... 有什么区别 2.有一个data.store -Ext.create('Ext.data.Store', storeId: 'StoreId', fields: ['resort', 'arrival', 'guest'], data: 'items': [ 'resort': '00CPT', "arrival": "16 Jun 2013", "guest": "Judy Roehsner" , 'resort': '', "arrival": "", "guest": "Robert Roehsner" ] , proxy: type: 'memory', reader: type: 'json', root: 'items' ); 当我将此商店分配给Var Grid = xtype: 'grid', store: Ext.data.StoreManager.lookup('StoreId'), columns: [ header: 'Resort', dataIndex: 'resort' , header: 'Arrival', dataIndex: 'arrival' , header: 'Accompanying Guest(s)', dataIndex: 'guest', flex: 1 ] ; 时,它最终出现了错误。这里有什么问题?【参考方案2】:

您必须先定义您的网格,然后才能在以下项目中使用它:

var Grid = 
    xtype: 'grid',
    columns: [
        header: 'Resort',
        dataIndex: 'resort'
    , 
        header: 'Arrival',
        dataIndex: 'arrival'
    , 
        header: 'Accompanying Guest(s)',
        dataIndex: 'guest',
        flex: 1
    ]
;

var Panel = new Ext.Panel(
   // title: 'Test',
    id: 'Panel',
    items: [Grid]
);

或者另一种选择是(当您在不同的 js 文件中有网格时,您可以使用监听器,如下所示):

        var Panel = new Ext.Panel(
            // title: 'Test',
            id: 'Panel',
            items: [],
            listeners: 
                render: function(pnl) 
                    pnl.add(Grid);
                

            
        );

        var Grid = 
            xtype: 'grid',
            columns: [
                header: 'Resort',
                dataIndex: 'resort'
            , 
                header: 'Arrival',
                dataIndex: 'arrival'
            , 
                header: 'Accompanying Guest(s)',
                dataIndex: 'guest',
                flex: 1
            ]
        ;

        var win2 = new Ext.Window(
            layout: 'fit',
            width: 500,
            height: 400,
            closeAction: 'hide',
            plain: true,
            items: [Panel]
        );
        b.getEl().on('click', function() 
            win2.show();

下面是表示相同的小提琴

Demo

【讨论】:

以上是关于将 Ext.grid.Panel 绑定到 Ext.Panel 时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 EXTJS 4 中向 Ext.Grid.panel 添加监听器

如何在 Ext.grid.panel 中定义视图

为啥这个 Ext.grid.Panel 会崩溃?

EXTJS 5:为啥 Ext.grid.Panel 没有 stripRows 效果,在我将主题从 Neptune 更改为清晰之后

extjs ext5 Ext.grid.Panel 分页,搜索

使用 Ext.grid.Panel.reconfigure() 打破了网格 RowEditing 插件