javascript - Knockout 中的简单字符串替换

标签 javascript string knockout.js

尝试用可观察对象替换简单的字符串时,我不断收到以下错误。

str.replace is not a function

这是我的意思的示例。我得到以下 observable,效果很好:

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

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

最佳答案

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

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/

关于javascript - Knockout 中的简单字符串替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16307309/

相关文章:

javascript - Angular 下拉菜单问题

python - 如何计算字符串中子字符串的连续重复次数?

ruby - 我怎样才能像 shell 那样拆分字符串来填充 ARGV?

javascript - knockout.js 可观察数组,错误 "Uncaught ReferenceError: Unable to process binding "

javascript - Sequelize create 方法忽略验证规则

javascript - 按顺序而不是一起过渡面板 (D3)

javascript - RXJS Observable 枚举类型,类型 'Observable<Type>' 不可分配给类型 'Type'

c++ - 将文件内容读入动态分配的 char* 数组——我可以改为读入 std::string 吗?

knockout.js - knockout validation

javascript - 在网格中指定默认排序