带有组合框的网格面板作为列单元格编辑extjs

Grid panel with comboboxes as columns cell Editing extjs

我有一个包含三列的网格面板,我使用编辑器将这三列作为组合框,并添加了一个单元格编辑插件。我应该能够添加一行和 select 来自三个不同商店的组合框的值。问题是我无法添加没有默认网格存储的行。如何添加一行以查看 select 值的组合框列。 Here is the fiddle

"Grids are composed of two main pieces - a Ext.data.Store full of data and a set of columns to render."

您必须将商店添加到网格面板,然后尝试通过单击添加按钮向商店添加一行。我已经修改了代码,现在可以使用了。

Ext.application({
    models: [
        'OneModel',
        'TwoModel',
        'ThreeModel'
    ],
    views: [
        'MyGridPanel'
    ],
    name: 'combo',

    launch: function() {
        Ext.create('combo.view.MyGridPanel', {renderTo: Ext.getBody()});
    }

});

Ext.define('combo.view.MyGridPanel', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.mygridpanel',

    requires: [
        'combo.view.MyGridPanelViewModel',
        'combo.view.MyGridPanelViewController',
        'Ext.grid.column.Column',
        'Ext.form.field.ComboBox',
        'Ext.view.Table',
        'Ext.toolbar.Toolbar',
        'Ext.button.Button',
        'Ext.grid.plugin.CellEditing'
    ],
    store:Ext.create('Ext.data.Store',{
        fields:[{   
            name:'One',
            name:'Two',
            name:'Three'
        }]
    }),

    controller: 'mygridpanel',
    viewModel: {
        type: 'mygridpanel'
    },
    height: 501,
    width: 562,
    title: 'My Grid Panel',

    columns: [
        {
            xtype: 'gridcolumn',
            dataIndex: 'string',
            text: 'One',
            editor: {
                xtype: 'combobox',
                displayField: 'description',
                valueField: 'description',
                bind: {
                    store: '{oneStore}'
                }
            }
        },
        {
            xtype: 'gridcolumn',
            dataIndex: 'number',
            text: 'Two',
            editor: {
                xtype: 'combobox',
                displayField: 'lastname',
                valueField: 'id',
                bind: {
                    store: '{twoStore}'
                }
            }
        },
        {
            xtype: 'gridcolumn',
            dataIndex: 'date',
            text: 'Three',
            editor: {
                xtype: 'combobox',
                displayField: 'name',
                valueField: 'id',
                bind: {
                    store: '{threeStore}'
                }
            }
        }
    ],
    dockedItems: [
        {
            xtype: 'toolbar',
            dock: 'top',
            items: [
                {
                    xtype: 'button',
                    text: 'Add',
                    listeners: {
                        click: 'onButtonClick'
                    }
                }
            ]
        }
    ],
    plugins: [
        {
            ptype: 'cellediting',
            clicksToEdit: 1
        }
    ]

});
Ext.define('combo.view.MyGridPanelViewModel', {
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.mygridpanel',

    requires: [
        'Ext.data.Store',
        'Ext.data.proxy.Memory'
    ],

    stores: {
        oneStore: {
            model: 'combo.model.OneModel',
            data: [
                {
                    description: 'vel'
                },
                {
                    description: 'magni'
                },
                {
                    description: 'delectus'
                },
                {
                    description: 'quas'
                },
                {
                    description: 'asperiores'
                },
                {
                    description: 'molestias'
                },
                {
                    description: 'sunt'
                },
                {
                    description: 'facere'
                },
                {
                    description: 'et'
                },
                {
                    description: 'magnam'
                }
            ],
            proxy: {
                type: 'memory'
            }
        },
        twoStore: {
            model: 'combo.model.TwoModel',
            data: [
                {
                    id: 'aperiam_01',
                    lastname: 'aut'
                },
                {
                    id: 'iure_11',
                    lastname: 'dolores'
                },
                {
                    id: 'fugiat_21',
                    lastname: 'excepturi'
                },
                {
                    id: 'et_31',
                    lastname: 'praesentium'
                },
                {
                    id: 'necessitatibus_41',
                    lastname: 'aperiam'
                },
                {
                    id: 'fugiat_51',
                    lastname: 'quia'
                },
                {
                    id: 'ullam_61',
                    lastname: 'nihil'
                },
                {
                    id: 'tempora_71',
                    lastname: 'nisi'
                },
                {
                    id: 'ea_81',
                    lastname: 'tempora'
                },
                {
                    id: 'doloribus_91',
                    lastname: 'nostrum'
                }
            ],
            proxy: {
                type: 'memory'
            }
        },
        threeStore: {
            model: 'combo.model.ThreeModel',
            data: [
                {
                    id: 'sapiente_01',
                    name: 'dolorem'
                },
                {
                    id: 'eum_11',
                    name: 'animi'
                },
                {
                    id: 'rerum_21',
                    name: 'rerum'
                },
                {
                    id: 'earum_31',
                    name: 'quaerat'
                },
                {
                    id: 'voluptatem_41',
                    name: 'modi'
                },
                {
                    id: 'omnis_51',
                    name: 'autem'
                },
                {
                    id: 'autem_61',
                    name: 'autem'
                },
                {
                    id: 'voluptatem_71',
                    name: 'voluptatum'
                },
                {
                    id: 'ut_81',
                    name: 'pariatur'
                },
                {
                    id: 'dolore_91',
                    name: 'dolorem'
                }
            ],
            proxy: {
                type: 'memory'
            }
        }
    }

});
Ext.define('combo.view.MyGridPanelViewController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.mygridpanel',

    onButtonClick: function(button, e, eOpts) {
        button.up('grid').getStore().insert(0, {});
        grid.getPlugin('CellEditing').startEditByPosition({row: 0, column: 1});
    }

});
Ext.define('combo.model.OneModel', {
    extend: 'Ext.data.Model',

    requires: [
        'Ext.data.field.Field'
    ],

    fields: [
        {
            name: 'description'
        }
    ]
});
Ext.define('combo.model.ThreeModel', {
    extend: 'Ext.data.Model',

    requires: [
        'Ext.data.field.Field'
    ],

    fields: [
        {
            name: 'id'
        },
        {
            name: 'name'
        }
    ]
});
Ext.define('combo.model.TwoModel', {
    extend: 'Ext.data.Model',

    requires: [
        'Ext.data.field.Field'
    ],

    fields: [
        {
            name: 'id'
        },
        {
            name: 'lastname'
        }
    ]
});