Knockout JS - 解析/格式值(扩展器?)

时间:2013-12-15 20:26:41

标签: javascript knockout.js

我需要在模型和视图之间使用简单的转换值。我有一个数字,我希望模板显示通过数千曝光,但在模型中我需要使用它。

例如(爆炸数字扩展到“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));

在我的示例中,没有将称为将爆炸后的数字转换回浮点数。我尝试了很多,但它仍然无效(翻看读写等)。

谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

如果您将实际数字与字符串表示分开存储,您可以从关系中获得更多收益。如果在第三个计算值上运行计算,则原始数字的两种形式都可用。这是模拟扩展中您希望的输入/输出功能的最佳方法。这些扩展并不像那样。

http://jsfiddle.net/sFyx6/7/

    // 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;
        }} );