1

単純な文字列をオブザーバブルに置き換えようとすると、次のエラーが発生し続けます。

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: ""});

なぜそうなのか誰か知っていますか?説明をいただければ幸いです。

4

2 に答える 2