如何将存储别名获取到视图层中的 extjs 处理程序

how to get store alias into extjs handler in view layer

我是 extjs 的新手,我正在尝试为 extjs mvc 编写一个示例。如果我在一个文件 app.js 中编写 mvc,它工作正常,但如果我分离到不同的文件(模型、视图和控制器),则数据正在填充,但事件监听器不工作: 下面是我的商店js:

Ext.define('Crud.store.Product',{
    extend: 'Ext.data.Store',
    alias:'widget.pStore',
    model: 'Crud.model.Product',  
    autoLoad: true,
    autoSync: true

});

问题出在视图js:

var rowEditing = Ext.create('Ext.grid.plugin.RowEditing');
Ext.define('Crud.view.Main',{
    extend: 'Ext.grid.Panel',
    renderTo: document.body,
    plugins: [rowEditing],
    width: 400,
    height: 300,
    frame: true,
    title: 'Products',
    alias:'pGrid',
    store: 'Product',
    columns: [{
            text: 'ID',
            width: 40,
            sortable: true,
            dataIndex: 'id'
        }, {
            text: 'Name',
            flex: 1,
            sortable: true,
            dataIndex: 'name',
            field: {
                xtype: 'textfield'
            }
        }, {
            header: 'Price',
            width: 80,
            sortable: true,
            dataIndex: 'price',
            field: {
                xtype: 'textfield'
            }
        }],
    dockedItems: [{
            xtype: 'toolbar',
            items: [{
                    text: 'Add',
                    iconCls: 'icon-add',
                    handler: function() {
                        // empty record
                        store.insert(0, new Product());
                        rowEditing.startEdit(0, 0);
                    }
                }, '-', {
                    text: 'Delete',
                    iconCls: 'icon-delete',
                    handler: function() {
                        var selection = grid.getView().getSelectionModel().getSelection()[0];
                        if (selection) {
                            store.remove(selection);
                        }
                    }
                }]
        }]
});

in grid.getView().getSelectionModel().getSelection()[0],它说 grid is not defined 和 store not defined in store.insert(0,new Product()) 相同].

在单个 js 文件中,如果我像下面这样创建变量,它就可以正常工作。

grid=Ext.create('Ext.grid.Panel',{
//view code
}

and store= Ext.create('Ext.data.Store',{
   //store code
}

你能帮我如何获取商店和网格对象吗?

您必须从单击的按钮(处理程序的第一个参数)转到网格,然后从那里存储:

handler: function(btn) {
    var grid = btn.up('grid'),
        store = grid.getStore();

您可以将 storeId 分配给商店,并通过其 Id 获取商店。

创建商店时:

store= Ext.create('Crud.store.Product',{
   storeId: 'some-store-id'
}

在事件处理程序中:

handler: function() {
   var store = Ext.getStore('some-store-id'); 
}