当我使用ko.mapping.toJSON
时,它会将我所做的任何更改转换为字符串,并且它们必须是数字。我尝试使用自定义映射,如下所示:
var mapping = {
'y': {
update: function(options) {
return parseFloat(options.data);
}
}
}
...但这只会将它们作为数字保留在页面的内容中。由于我使用它来更新和由HighCharts.js引入的外部JSON,因此即使在toJSON之后,数字也需要保留数字。
从之前的答案我可以使用:
//override toJSON to turn it back into a single val
mappedData.prototype.toJSON = function() {
return parseInt(ko.utils.unwrapObservable(this.val), 10); //parseInt if you want or not
};
......游泳工作。但是这只是JSON中的单个值类型,因此我不清楚如何使用相同的覆盖。我是否还需要在此实例中创建一个全新的对象来执行此操作。或者他们的东西更简洁?
答案 0 :(得分:6)
每当您在输入中编辑值时,该值最终都将成为字符串。 Knockout从元素中读取新值,它始终是一个字符串。
如果你想保持数字,请查看这个问题的答案:Knockout.js: time input format and value restriction有两种方法可以做到这一点。如果在答案中使用自定义绑定(numericValue
),则无需对映射选项执行任何其他操作。如果您使用numericObservable
想法,那么您需要使用映射选项来确保它创建这些特殊的可观察对象而不仅仅是正常的可观察对象。
否则,您也可以继续使用toJSON
覆盖。