2012-11-16 91 views

回答

0

您可以实现在数字扩展一个小的修复(参考,您张贴的扩展文档页面)解决这个问题。在延长的“写”的方法,加上顶部以下代码:需要

 if (typeof newValue == "string") { 
      newValue = newValue.replace(",", "."); 
     } 

if语句,以防止模型初始化错误。首次创建模型时,该值很可能设置为数字而不是字符串,因此我们无法在此对象上调用.replace方法。

1

你可能不仅要接受数字字段用逗号,也输出人数从你的VM逗号为小数点。因此,您还需要实现基础计算observable的getter函数read。如果你不关心四舍五入,还可以简化write函数。以下是完整的代码:

ko.extenders.numeric = function(target) { 
    var result = ko.computed({ 
     read: function() { 
      var value = target(); 
      return isNaN(value) || value===null || value==='' 
       ? value 
       : value.toString().replace('.',','); 
     } 
     ,write: function(newValue) { 
      if (typeof newValue === "string") { 
       newValue = newValue.replace(",", "."); 
      } 
      if (newValue !== target()) { 
       target(newValue); 
      } 
     } 
    }); 
    result(target()); 
    return result; 
}; 
相关问题