Extjs 4控制器网格编辑器更改事件



背景

我有一个可编辑的网格和一个管理网格的控制器。我想听听所有网格编辑器的更改事件,如果网格没有任何空白行,我想添加一个新行。

问题

我似乎听不到网格编辑器通过控制器更改事件。这是我的密码。

发票控制器

Ext.define('MyApp.controller.InvoiceController', {
    extend: 'Ext.app.Controller',
    models: [
        'Invoice',
        'InvoiceItem'
    ],
    stores: [
        'Invoice',
        'InvoiceItem'
    ],
    views: [
        'InvoiceForm',
        'InvoiceItemsGrid',
    ],
    init: function(application) {
        this.control({
            '[action=update]': {
                change: this.addBlankInvoiceItem,
                scope: this
            },
        });
    },
    //...
    addBlankInvoiceItem: function(btn) {
        var store = this.getStore("InvoiceItem");
        var grid = this.getView('InvoiceItemsGrid');
        var invoice_item = new MyApp.model.InvoiceItem({
            "invoice_id" : invoice_id
        });
        var insert_point = store.getCount();//insert at end of grid
        store.insert(insert_point, invoice_item);
    },
});

网格

Ext.define('MyApp.view.InvoiceItemsGrid', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.invoice_items_grid',
    requires: [
        'MyApp.view.ProductCombo',
        'MyApp.view.AccountCombo',
        'MyApp.view.TaxRateCombo'
    ],
    frame: true,
    bodyBorder: true,
    title: 'Invoice Items',
    columnLines: true,
    forceFit: true,
    store: 'InvoiceItem',
    initComponent: function() {
        var me = this;
        Ext.applyIf(me, {
            columns: [
              //...
                {
                    xtype: 'gridcolumn',
                    maxWidth: 100,
                    minWidth: 80,
                    width: 100,
                    dataIndex: 'product_id',
                    text: 'Product ID',
                    editor: {
                        xtype: 'product_combo',
                        actiuon: 'update'
                    }
                }
                //...
            ],
            viewConfig: {
                plugins: [
                    Ext.create('Ext.grid.plugin.DragDrop', {
                    })
                ]
            },
            plugins: [
                Ext.create('Ext.grid.plugin.CellEditing', {
                    clicksToEdit: 1
                })
            ]
        });
        me.callParent(arguments);
    },
});

我可以收听网格的Edit事件并添加新行,使用网格编辑事件的问题是,该事件在编辑器失去焦点后触发,而不是在编辑器内容更改时触发,这不会产生我想要的行为。

'invoice_items_grid': {
    edit: this.addBlankInvoiceItem
},

问题如何通过控制器收听网格上每个编辑器的更改事件?

您的网格编辑器配置中有一个拼写错误

actiuon: 'update'

应该是:

action: 'update'

最新更新