背景
我有一个可编辑的网格和一个管理网格的控制器。如果网格没有任何空白行,我想听所有网格编辑器的更改事件并添加一个新行。
问题
我似乎无法通过控制器监听网格编辑器更改事件。这是我的代码。
发票控制器
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
},
问题 如何通过控制器监听网格上每个编辑器的更改事件?