我有一个Ext.grid.Panel
,我想验证用户输入:有一个名为delete
的字段和一个名为string
的字段。 delete
的有效输入是一个数字,不能大于同一行中string
字段的长度。我已经知道如何使用vtype
所以现在我有了
delete : function(val, field){
var expr = new RegExp("^[-]?[0-9]*[\.]?[0-9]*$");
var num = expr.test(val);
if (!num) return false; //can't be not a number
else{
//have no idea...
}
}
我不知道如何访问同一行的string
值。
希望它很清楚。谢谢!
答案 0 :(得分:1)
如果将编辑器定义为变量,它实际上要简单得多,你可以在字段验证方法中引用它并获取活动记录,例如:
// create editor as a variable
var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1,
autoCancel: false
});
// referring to the edited record in the validator function
{
xtype: 'datecolumn',
header: 'Comp Date',
dataIndex: 'comp_date',
width: 100,
format: 'j-M-Y',
editor: {
xtype: 'datefield',
format: 'j-M-Y',
validator: function(value) {
var record = cellEditing.getActiveRecord(); // get active record
if (Ext.Date.parse(value, 'j-M-Y') < record.get('start_date')) {
return 'Cannot complete before start date';
} else return true;
}
}
}
答案 1 :(得分:0)
您应该处理validateedit( Ext.grid.plugin.Editing editor, Object e, Object eOpts )
event。
第二个参数e
包含对已编辑记录(e.record
)的引用。您可以使用此记录来获取两个字段(string
和delete
)并相应地执行验证。
将false
分配给e.cancel
将取消编辑。
答案 2 :(得分:0)
rowEditing.on({
scope : this,
afteredit : function(roweditor, changes, record, rowIndex) {
var can_save = true;
var records = store.getRange();
for(var i = 0; i < records.length; i++) {
if(records[i].data['delete'] >= records[i].data['string '].toString().length) {
Ext.MessageBox.alert('Input error', "blahblah");
}
答案 3 :(得分:0)
我通过以下方式访问了插件:
this.ownerCt.ownerCmp.plugins
这使您可以访问cellEditing插件,然后您可以执行以下操作:
var record = plugin.getActiveRecord();