3

私が使用するとき、ko.mapping.toJSONそれは私が行った変更を文字列に変換し、それらは数字である必要があります。私は次のようにカスタムマッピングを使用してみました:

    var mapping = {
   'y': {
        update: function(options) {
                return parseFloat(options.data);
        }
    }
}

...しかし、これはページの構成内の数字としてそれらを保持するだけです。これを使用して、HighCharts.jsによってプルされる外部JSONを更新しているため、toJSONの後でも数値は数値のままである必要があります。

ここでの以前の回答から、私は使用することができました:

//override toJSON to turn it back into a single val
    mappedData.prototype.toJSON = function() {
       return parseInt(ko.utils.unwrapObservable(this.val), 10);  //parseInt if you want or not 
    };

...泳いで働いた。ただし、これはJSONの単一の値型であるため、同じオーバーライドをどのように使用できるかわかりません。この場合もこれを行うには、まったく新しいオブジェクトを作成する必要がありますか?それとも彼らの何かはもっと簡潔ですか?

4

1 に答える 1

6

入力の値を編集するときはいつでも、値は文字列になります。Knockoutは要素から新しい値を読み取り、それは常に文字列です。

数値のままにしておきたい場合は、この質問の答えを見てください: Knockout.js:それを行うためのいくつかの方法の時間入力形式と値の制限。回答でカスタムバインディング(numericValue)を使用する場合は、マッピングオプションで他に何もする必要はありません。このnumericObservableアイデアを使用する場合は、マッピングオプションを使用して、通常のオブザーバブルではなく、これらの特別なオブザーバブルを作成していることを確認する必要があります。

toJSONそれ以外の場合は、オーバーライドを引き続き使用できます。

于 2011-10-01T00:20:22.063 に答える