我需要在模型和视图之间使用简单的转换值。我有一个数字,我希望模板显示通过数千曝光,但在模型中我需要使用它。
例如(爆炸数字扩展到“123 123 123”和后面):
ko.extenders.numeric = function(target, precision) {
var result = ko.computed({
read: function() {
return target().toFixed(precision).toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
},
write: function(value) {
return parseFloat(target().toString().replace(" ", ""));
}
});
result.raw = target;
return result;
};
我的坏模特,我必须在这里解析爆炸号码:
var Model = function(number) {
this.multiply = ko.observable(number).extend({ numeric : 0 });
this.result = ko.computed(function(){
var multiply = this.multiply();
// HERE IS A PROBLEM - not converted back to the number
return multiply * 1234;
}, this).extend({ numeric : 0 });
};
ko.applyBindings(new Model(123123123));
在我的示例中,没有将写称为将爆炸后的数字转换回浮点数。我尝试了很多,但它仍然无效(翻看读写等)。
谢谢你的帮助!
答案 0 :(得分:1)
如果您将实际数字与字符串表示分开存储,您可以从关系中获得更多收益。如果在第三个计算值上运行计算,则原始数字的两种形式都可用。这是模拟扩展中您希望的输入/输出功能的最佳方法。这些扩展并不像那样。
// store the actual number here for manipulating later
self.number = ko.observable(number);
// This value is for display
self.spreadNum = ko.observable(number).extend({ numeric : 0 });
// Keep another computed value for editing
self.calcNum = ko.computed({
read: function() {
return self.number() * 234.56;
}} );