我使用带有CellEditingPlugin的Grid和两个DateColumns(startdate和enddate)。两列都分配了一个名为startdateEditfield和enddateEditfield的日期字段。
如果两个日期相同且更改了startdate,我也想更改enddate。
所以我做了
var start = Ext.getCmp("startdateEditfield")
start.on('change',function(field,newValue,oldValue) {
var end = Ext.getCmp("enddateEditfield")
if(end.getValue()==oldValue) end.setValue(newValue);
});
这不起作用,因为enddateEditfield不存在,因为我正在编辑startdate,而不是enddate。但是如何访问我正在编辑的记录?
答案 0 :(得分:0)
在某些事件处理程序上,您可以使用以下命令访问记录:
var selectedModel = this.up('grid').getSelectionModel().getSelection()[0];
selectedModel.set('dataIndexOfNextCol', "Success");
查看我对此问题的回答,它可能会对您有所帮助:ExtJs. Set rowediting cell value
答案 1 :(得分:0)
好吧,您可以尝试使用beforedit并编辑监听器......
这就是我设法做到的方式
Ext.define('Foo.view.BarView', {
extend: 'Ext.grid.Panel',
alias: 'widget.foobarview',
initComponent: function() {
var me = this;
// this is our last selected record
this.lastRecord = null;
this.plugins = [{
ptype: 'cellediting',
clicksToEdit: 1
}];
this.listeners = {
beforeedit: function(editor, obj){
this.lastRecord = obj.record;
}
};
this.columns = [
{
dataIndex: 'foo',
text: 'bar',
editor: {
xtype: 'datefield',
listeners: {
change: function(datefield, newValue, oldValue, eOpt){
me.fireEvent('myEvent', datefield, me);
}
}
}
}
]
};
现在在您的控制器中,您可以在从网格更改datefield中的值时获取最后选择的记录...
Ext.define('Foo.controller.BarController', {
extend: 'Ext.app.Controller',
stores: ['your stores'],
views: [
'your views'
],
init: function() {
var me = this;
'foobarview': {
myEvent: this.onFireMyEvent
}
},
onFireMyEvent: function(field, grid){
record = grid.lastRecord;
}
});