简单的字符串替换在Knockout

Simple String Replace in Knockout

本文关键字:Knockout 替换 字符串 简单      更新时间:2023-09-26

当尝试用一个可观察对象替换一个简单的字符串时,我一直得到以下错误:

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);

但是当我把它放入computed函数时,它返回错误。

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

有人知道为什么会这样吗?

很可能是因为可观察对象返回的值不是字符串,这会导致此错误。下面是一个处理方法:

this.price = ko.observable(data.price);
this.priceFloat = ko.computed(function() {
    var str = viewModel.price() ? viewModel.price().toString() : '';
    var nw = str.replace(',', '');
    console.log(nw);
return parseFloat( Math.abs(viewModel.price()) ).toFixed(2);
}, this);
编辑:

http://jsfiddle.net/Qbc7Z/3/

在注释的ko中,您可以这样使用…

<!-- ko text: address().telephone.toString().replace(/('d{3})('d{3})('d{4})/, "($1) $2-$3") --><!-- /ko --><br/>