ExtJS 4.1.1:评估网格中的字段

时间:2012-07-11 13:41:37

标签: javascript extjs extjs4 extjs4.1

我正在努力使用具有可编辑单元格(CellEditing plugin)的ExtJS 4.1.1 grid

一个人应该能够在单元格中键入数学公式,并且应该将结果生成到字段的值中。例如:如果用户输入(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的input,我创造了这个:

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=numbervalue=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);
},

1 个答案:

答案 0 :(得分:1)

让我们打破这段代码。

onGridValidateEdit : function(editor,e,opts) {
    var str = e.value.toString();

这个代码使用的是什么监听器?这对我们来说非常重要,这是我在插件中设置监听器的方式:

listeners: {
            edit: function(editor, e){
                var record = e.record;
                var str = record.get("your data_index of the value");
            }
        } 

这样设置对我有用,所以让我们继续:

   var strCalc = str.match(/0-9+-*\/()/g);
    console.log(strCalc);

此时strCalc = null,这也是正确的。 str.match返回null,因为你的正则表达式与字符串中的任何内容都不匹配。我认为你想要做的是:

var strCalc = str.replace(/[^0-9+*-]/g, "");
console.log(strCalc);

这会将其更改为替换字符串中不是等式运算符和数字的所有字符。在那之后,我认为它应该适用于整数。我认为你实际上也可能想要十进制数字,但我无法想到正面的正则表达式(需要以某种方式转义),但它应该很简单,可以在谷歌搜索中找到