2012-05-16 29 views
4

我有一個自定義綁定,我用它來格式化百分比數字。是否可以在計算中使用擴展器?

ko.bindingHandlers.textPercent = { 
    //init: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
    // //init logic 
    //}, 
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
     var val = parseFloat(ko.utils.unwrapObservable(valueAccessor())); 
     if ($.isNumeric(val)) { 
      $(element).text((val * 100).toFixed(2))+"%"; 
     } 
     else { 
      $(element).text("#Error"); 
     } 
    } 
} 

用法:

<span data-bind="textPercent: amount" ></span> 

<span data-bind="textPercent: amount()/2" ></span> 

它的工作好,但我希望能夠使用不同數量的固定數字,所以我做了一個擴展:

ko.extenders.percent = function (target, precision) { 
    var result = ko.computed({ 
     read: function() { 
      return (target()*100).toFixed(precision)+"%"; 
     }, 
     write: function (newValue) { 
      target(parseFloat(newValue)/100); 
     } 
    }); 
    return result; 
}; 

用法:

<span data-bind="text: amount.extend({ percent: 2 })" ></span> 

<span data-bind="text: (amount()/2).extend({ percent: 2 })" ></span> 

問題是不是窩rk與內聯計算。

對此提出建議?

http://jsfiddle.net/eRapL/4/

回答

4

您必須ko.observable()

例包裝你的表達:

text extend percent: <span data-bind="text: ko.observable(amount()/2).extend({ percent: 2 })" ></span><br/> 

看:http://jsfiddle.net/c7Qx7/1/

相關問題