0

申し訳ありませんが、私の英語はあまり上手ではありませんが、私の問題を説明しようと思います。値を通貨形式で表示する必要があるいくつかの入力フィールドを含むフォームを取得しましたが、フィールドの属性「値」は float 型である必要があります。再開: 入力が通貨形式で値を表示するようにしたいのですが、浮動小数点値は変更しません。ノックアウトを使用して値のバインディングを行っています。私の試みの1つの上:Htmlコード:

    <input data-bind="value: unit_price, attr:{text: $parent.currency($data.unit_price())}" type="text" name="unit_price" class="align_right unit_price_col" />

ノックアウト:

    self.currency = ko.computed({
         read: function(key) {
    },
     write: function(value) {
         console.log(value); // Value of the input
     }
    });

私の試みは、値が変更されたときに関数がその値を受け取り、値を通貨にフォーマットし、オブザーバブルの値を変更せずに、属性テキストのみを変更してフォーマットされた値を表示する計算関数を作成しようとしていました。これは可能ですか?

ありがとうございました

4

1 に答える 1

0

計算されたものは実際の観察可能なものを隠します。現在のバージョンの KO での唯一の解決策は、次のような値を公開することです。

http://jsfiddle.net/Pv3f8/

ko.extenders.currency = function(observable, options) {
    var wrapped = ko.computed({
        write: observable,
        read: function() {
            return Globalize.format(observable(), "c" );
        }
    });

    wrapped.raw = observable;
    return wrapped;
};

format bindnigHandlers によって使用される3 番目の関数を導入する必要があることを KO チームに提案しました。このようにして、オブザーバブルは常に実際の値を返しますが、ビューはフォーマットされた値を使用します。それまではこれが1つの方法です

更新: 値バインディングを使用して入力から値を更新する場合は、文字列になるため、もう少し創造的になる必要があります

http://jsfiddle.net/Pv3f8/1/

于 2013-09-23T13:24:54.443 に答える