@ user3297291の答えのおかげで、私はそれを行う方法のアイデアを得ました。
私は私の数値を処理するために、次のbindingHandlerがあります
ko.bindingHandlers.numValue = {
init: function (element, valueAccessor) {
function numValueHandler() {
valueAccessor()(this.value);
}
$(element).on("input change", numValueHandler)
.val(ko.unwrap(valueAccessor()));
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).off("input change", numValueHandler);
});
},
update: function (element, valueAccessor) {
element.value =ko.unwrap(valueAccessor());
}
};
私は値を取得する場合$記号を削除するには、この行を追加:
parseFloat(("" + this.value).replace(/[^\.\d]/g, ""))
をそして前に$記号を追加しました表示に戻す:
element.value ='$' + ko.unwrap(valueAccessor());
したがって、bindingHandler全体は次のようになります。
ko.bindingHandlers.numValue = {
init: function (element, valueAccessor) {
function numValueHandler() {
valueAccessor()(parseFloat(("" + this.value).replace(/[^\.\d]/g, "")));
}
$(element).on("input change", numValueHandler)
.val(ko.unwrap(valueAccessor()));
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).off("input change", numValueHandler);
});
},
update: function (element, valueAccessor) {
element.value ='$' + ko.unwrap(valueAccessor());
}
};
そして、呼び出しは以下のとおりです。それぞれのフィールド上と数行のコードでformatCurrency
関数をコールすることなく、完璧に働いて
<input type="text" data-bind="numValue: improvements" />
<input type="text" data-bind="numValue: improvements2" />
//etc..
。
ありがとうございます@ user3297291あなたの助けに!