尝试用可观察对象替换简单的字符串时,我不断收到以下错误。
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);
编辑:
关于javascript - Knockout 中的简单字符串替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16307309/