我正在努力使用grid
具有可编辑单元格(CellEditing 插件)的 ExtJS 4.1.1。
一个人应该能够在单元格中输入数学公式,并且它应该将结果生成到字段的值中。例如:如果用户键入(320*10)/4
返回值应该是800
. 或者类似,如果用户键入(320m*10cm)/4
函数应该从公式中去除非数学字符然后计算它。
我想用 RegExp 替换(或匹配),但我似乎无法让它工作。它不断返回 NaN,当我这样做时,console.log(e.value);
它只返回我需要的originalValue
而不是返回value
。
我没有太多要附加的代码:
onGridValidateEdit : function(editor,e,opts) {
var str = e.value.toString();
console.log(str);
var strCalc = str.match(/0-9+-*\/()/g);
console.log(strCalc);
var numCalc = Number(eval(strCalc));
console.log(numCalc);
return numCalc;
},
返回:str=321
strCalc=null
numCalc=0
当我输入321*2
.
任何帮助表示赞赏,
GR。
更新:
根据Paul Schroeder的意见,我创建了这个:
onGridValidateEdit : function(editor,e,opts) {
var str = e.record.get(e.field).toString();
var strCalc = str.replace(/[^0-9+*-/()]/g, "");
var numCalc = Number(eval(strCalc));
console.log(typeof numCalc);
console.log(numCalc);
return numCalc;
},
它计算了数字,但我无法将其打印回网格本身。它显示为“NaN”,即使在控制台中显示typeof=number
和value=800
.
最终代码:
这是有效的最终代码:
onGridValidateEdit : function(editor,e,opts) {
var fldName = e.field;
var str = e.record.get(fldName).toString();
var strCalc = str.replace(/[^0-9+*-/()]/g, "");
var numCalc = Number(eval(strCalc));
e.record.set(fldName,numCalc);
},