2

我有一堆數量在我的視圖模型是可觀察到的,我希望它們存儲爲數字,因爲它們用於幾個計算。但是,當我將它們綁定到我的視圖中的文本框時,我希望它們顯示爲特殊格式的字符串(1234.5678 =>「1,234.57」)。在這種情況下完成雙向綁定的最好方法是什麼,因爲我不能只使用與我的可觀察值綁定的值?Knockout.js雙向綁定:數字格式爲字符串

用戶需要能夠在可存儲數字值1234.56的文本框中輸入「1,234.56」或「1234.56」,如果通過javascript更改數值(3450),則需要輸入文本框的值被更新爲新值,但被格式化爲字符串(「3,450」)。

我很感激幫助!

回答

6

我會實現類似如下:

的JavaScript:

function ViewModel() { 
    var self = this; 
    self.dollarAmount = ko.observable(); 

    self.formattedDollarAmount = ko.computed({ 
     read: function() { 
      return applyFormat(self.dollarAmount()); // pseudocode 
     }, 
     write: function(value) { 
      var parsedDollarAmount = parseFloat(value); 
      if(!isNaN(parsedDollarAmount)) { 
       self.dollarAmount(parsedDollarAmount); 
      } 
      else { 
       // recommend adding validation of some sort 
       // so getting here is less likely 
       alert("invalid dollar amount"); 
      } 
     }, 
     owner: self 
    }); 
} 

HTML:

<input type="text" data-bind="value: formattedDollarAmount" /> 

參見文檔上計算觀測的詳細信息:http://knockoutjs.com/documentation/computedObservables.html

0

看:

http://jsfiddle.net/Ty8PG/14/

ko.bindingHandlers.numericValue = { 
init : function(element, valueAccessor, allBindingsAccessor) { 
    var underlyingObservable = valueAccessor(); 
    var interceptor = ko.computed({ 
     read: underlyingObservable, 
     write: function(value) { 

       underlyingObservable(rawNumber(value)); 

     } 
    }); 
    ko.bindingHandlers.value.init(element, function() { return interceptor }, allBindingsAccessor); 
}, 
update : function(element, valueAccessor, allBindingsAccessor) { 
element.value = number_format(valueAccessor()(), 2); 

} 

};

原貼:

https://groups.google.com/forum/#!topic/knockoutjs/gvhJt4iSOLk