2012-11-26 62 views
1

我試圖爲特殊數字格式創建自定義綁定。KO自定義綁定writeValueToProperty失敗

ko.bindingHandlers['valueTest'] = { 
     'init': function (element, valueAccessor, allBindingsAccessor) { 
      var valueUpdateHandler = function() { 
       var modelValue = valueAccessor(); 
       var elementValue = ko.selectExtensions.readValue(element); 
       ko.expressionRewriting.writeValueToProperty(modelValue, allBindingsAccessor, 'value', elementValue); 
      } 

      ko.utils.registerEventHandler(element, "change", valueUpdateHandler); 
     }, 
     'update': function (element, valueAccessor) { 
      var newValue = ko.utils.unwrapObservable(valueAccessor()); 
      var elementValue = ko.selectExtensions.readValue(element); 

      if (newValue !== elementValue) { 
       ko.selectExtensions.writeValue(element, newValue.toFixed(2).replace(".", ",")); 
      } 
     } 
    }; 

上撥弄http://jsfiddle.net/PAFTR/11/

也可以,但它更新失敗(螢火說:類型錯誤:ko.expressionRewriting.writeValueToProperty不是一個函數)。

回答

2

看起來這樣更適合於可觀察的擴展器? 檢查這個小提琴我已經做

http://jsfiddle.net/yEgmt/

其使用像

this.number = ko.observable().extend({ numeric: true }) 
+0

我知道觀察到擴展的,但我有情況下,當我提供複雜的JSON單ko.observable或者ko.observableArray。所以,請教我如何創建自定義綁定:) – edgecrusher

+0

請閱讀[官方文檔](http://knockoutjs.com/documentation/custom-bindings.html)如何創建自定義綁定 – Pavlo