0

grid編集可能なセル(CellEditingプラグイン)を持つExtJS4.1.1で苦労しています。

人はセルに数式を入力できる必要があり、フィールドの値に結果を生成する必要があります。例:ユーザーが入力した場合(320*10)/4、戻り値は。になります800。または、ユーザーが入力した場合(320m*10cm)/4、関数は数式から数学以外の文字を取り除き、それを計算する必要があります。

RegExpに置き換える(または一致させる)ことを検討していましたが、機能させることができないようです。それはNaNを返し続けます、そして私がそうするとき、それは私が必要とするものではなくconsole.log(e.value);、だけを返します。originalValuevalue

添付するコードはあまりありません。

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

1 に答える 1

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);

これにより、方程式の演算子や数値ではない文字列内のすべての文字が置き換えられるように変更されます。その後、整数で機能するはずだと思います。実際には10進数も必要かもしれないと思いますが、頭のてっぺんから正規表現を考えることはできません(。はなんとかしてエスケープする必要があります)が、Google検索で見つけるのに十分簡単なはずです。 。

于 2012-07-11T15:25:34.287 に答える