2

ビューモデルには観測可能な量がたくさんありますが、いくつかの計算で使用されるため、数値として保存する必要があります。ただし、ビューでテキストボックスにバインドする場合は、特別にフォーマットされた文字列(1234.5678 => "1,234.57")として表示する必要があります。オブザーバブルで値バインディングを使用することはできないので、この状況で双方向バインディングを実現するための最良の方法は何ですか?

ユーザーは、テキストボックスに「1,234.56」または「1234.56」を入力できる必要があります。これにより、数値値1234.56がオブザーバブルに格納されます。JavaScriptで数値(3450)を変更した場合、テキストボックスの値を次のように更新する必要があります。新しい値ですが、文字列( "3,450")としてフォーマットされています。

私は助けに感謝します!

4

2 に答える 2

6

次のようなものを実装します。

JavaScript:

function ViewModel() {
    var self = this;
    self.dollarAmount = ko.observable();

    self.formattedDollarAmount = ko.computed({
        read: function() {
            return applyFormat(self.dollarAmount()); // pseudocode
        },
        write: function(value) {
            var parsedDollarAmount = parseFloat(value);
            if(!isNaN(parsedDollarAmount)) {
                self.dollarAmount(parsedDollarAmount);
            }
            else {
                // recommend adding validation of some sort 
                // so getting here is less likely
                alert("invalid dollar amount"); 
            }
        },
        owner: self
    });
}

HTML:

<input type="text" data-bind="value: formattedDollarAmount" />

詳細については、計算されたオブザーバブルに関するドキュメントを参照してください: http://knockoutjs.com/documentation/computedObservables.html

于 2012-09-07T15:15:16.060 に答える