単純な文字列をオブザーバブルに置き換えようとすると、次のエラーが発生し続けます。
str.replace は関数ではありません
ここに私が意味するもののサンプルがあります。次のオブザーバブルを取得しましたが、これは正常に機能します。
this.price = ko.observable(data.price);
this.priceFloat = ko.computed(function() {
return parseFloat( Math.abs(viewModel.price()) ).toFixed(2);
}, this);
同じ番号の計算されたバージョンと観測可能なバージョンが必要な理由については、別の問題です。次に、コンマを削除する必要があります。これは非常に基本的なことです。コンソールでこれを実行しただけで、うまくいきました。
var str = "3,047";
var nw = str.replace(',', '');
console.log(nw);
しかし、計算された関数に入れると、エラーが返されます。
this.price = ko.observable(data.price);
this.priceFloat = ko.computed(function() {
var str = viewModel.price();
var nw = str.replace(',', '');
console.log(nw);
return parseFloat( Math.abs(viewModel.price()) ).toFixed(2);
}, this);
以下も試しましたが、うまくいきませんでした。それでも同じエラーが返されます。
ko.extenders.removeComma = function(target) {
var result = ko.computed({
read: function () { return target(); },
write: function (v) {
target(v.replace(/\,/g, ''));
}
});
return result;
};
this.price = ko.observable(data.price).extend({removeComma: ""});
なぜそうなのか誰か知っていますか?説明をいただければ幸いです。