Knockout中的简单字符串替换

时间:2013-04-30 19:13:41

标签: javascript string knockout.js

尝试使用observable进行简单的字符串替换时,我一直收到以下错误。

  

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

有谁知道为什么会这样?任何解释都将不胜感激。

2 个答案:

答案 0 :(得分:2)

很可能是因为observable返回的值不是字符串会导致此错误。请参阅下面的处理方法:

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/

答案 1 :(得分:0)

在评论中你可以像这样使用......

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