Javascript 在单独的面板中创建两个网格-Ext JS

Javascript 在单独的面板中创建两个网格-Ext JS,javascript,extjs,Javascript,Extjs,我想在两个并排的面板中制作两个网格。我尝试了以下代码: Ext.define('BlackWhiteList', { extend: 'Ext.panel.Panel', xtype: 'blackwhitelist', layout: { type: 'table', columns: 2, tableAttrs: { style: { width: '100%'

我想在两个并排的面板中制作两个网格。我尝试了以下代码:

Ext.define('BlackWhiteList', {
    extend: 'Ext.panel.Panel',
    xtype: 'blackwhitelist',
    layout: {
        type: 'table',
        columns: 2,
        tableAttrs: {
            style: {
                width: '100%'
            }
        }
    },

    defaults: {
        border: false
    },

    fieldDefaults: {
        labelWidth: 110,
        anchor: '100%'
    },

    items: [{
            title: 'Black List',
            cls: 'blackList',
            items: [
                grid
            ]
        },
        {
            title: 'White List',
            items: [
                grid
            ]
        }

    ]
});


var store = Ext.create('Ext.data.Store', {
    storeId: 'simpsonsStore',
    fields: ['name', 'email', 'phone'],
    data: [
        { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' },
        { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
        { name: 'Homer', email: 'homer@simpsons.com', phone: '555-222-1244' },
        { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' }
    ]
});

var grid = Ext.create('Ext.grid.Panel', {
    store: store,
    columns: [
        { text: 'Name', dataIndex: 'name' },
        { text: 'Email', dataIndex: 'email', flex: 1 },
        { text: 'Phone', dataIndex: 'phone' }
    ]

});
但目前在只显示了标题“黑名单”和“白名单”与空内容。我没有收到任何错误消息或任何可以告诉我这里出了什么问题的东西


我使用ExtJS 6。

这确实是一个棘手的问题,您需要在代码中修复两件事,以便代码正常工作

首先是如何定义网格以及在何处使用网格,a/m代码将在执行时为网格生成未定义的值。为什么?这与JS中的提升有关,JS将识别网格变量,但不会指定其值,因此当您创建Ext面板时,网格值等于undefined

因此,第一件事是将代码的var网格块移到顶部

但现在您将面临第二个问题,您将看到仅渲染一个栅格,为什么

因为网格是一个引用类型的对象,这将使两个面板尝试显示相同的网格,这是不可能的,因此它只显示在一个位置

因此,要解决此问题,您需要为网格使用Ext.define并为其指定xtype,因此当您在面板中多次使用xtype时,Ext将创建两个完全不同的网格实例。或者您可以创建var grid1和var grid2,但这并不好

最后是一个工作示例

代码示例

App.js

Ext.application({
name: 'Test',
requires: ['Test.MyGrid'],
launch: function () {
    Ext.create('Ext.panel.Panel', {
        renderTo: Ext.getBody(),
        layout: {
            type: 'table',
            columns: 2,
            tableAttrs: {
                style: {
                    width: '100%'
                }
            }
        },

        defaults: {
            border: false
        },

        fieldDefaults: {
            labelWidth: 110,
            anchor: '100%'
        },

        items: [{
                title: 'Black List',
                cls: 'blackList',
                items: [{
                    xtype: 'myGrid'
                }]
            }, {
                title: 'White List',
                items: [{
                    xtype: 'myGrid'
                }]
            }

        ]
    });
}
});
app/MyGrid.js

var store = Ext.create('Ext.data.Store', {
storeId: 'simpsonsStore',
fields: ['name', 'email', 'phone'],
data: [
    { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' },
    { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
    { name: 'Homer', email: 'homer@simpsons.com', phone: '555-222-1244' },
    { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' }
]
});

Ext.define('Test.MyGrid', {
    extend:'Ext.grid.Panel',
    store: store,
    xtype:'myGrid',
    columns: [
        { text: 'Name', dataIndex: 'name' },
        { text: 'Email', dataIndex: 'email', flex: 1 },
        { text: 'Phone', dataIndex: 'phone' }
    ]
    });
希望我说清楚:)