我需要帮助使用Knockout格式化数据绑定

时间:2012-08-01 00:48:02

标签: knockout.js

我是Knockout的新手,我正在寻找格式化输出的方法。我看到一个类似这样的例子但当然我的尝试没有用。

以下是jsfiddle的链接:http://jsfiddle.net/cezmp/

<div id="VMDiv">    
<table>
   <thead>
      <tr>
         <th>Raw</th>
         <th>Formatted</th>
      </tr>
   </thead>
   <tbody>
       <tr>
          <td data-bind="text : SomeData "> </td>
          <td data-bind="text : formatPercent(SomeData())"> </td>
       </tr>
    </tbody>
</table>
</div>


<script type="text/javascript">
    function formatPercent(value) {
        return value.toFixed(2) + "%";
    }

    function vm() {
        var self = this;
        self.SomeData = ko.observable(62.1795972898);
    }

    ko.applyBindings(new vm(), document.getElementById("VMDiv"));
</script>

2 个答案:

答案 0 :(得分:7)

您可以考虑使用计算的observable:

div id="VMDiv">    
<table>
 <thead>
  <tr>
     <th>Raw</th>
     <th>Formatted</th>
  </tr>
 </thead>
 <tbody>
   <tr>
      <td data-bind="text : SomeData "> </td>
      <td data-bind="text : SomeDataFormatted"> </td>
   </tr>
 </tbody>
</table>
</div>

<script type="text/javascript">
    function vm() {
        var self = this;
        self.SomeData = ko.observable(62.1795972898);
        self.SomeDataFormatted = ko.computed(function(){
            return self.SomeData().toFixed(2) + "%";
        });
    }

    ko.applyBindings(new vm(), document.getElementById("VMDiv"));
</script>

答案 1 :(得分:5)

如果你想要一个更通用的解决方案,你可以做这样的事情

(function () {

    ko.extenders.isCurrency = function (target, options) {
        var result = ko.dependentObservable({
            read: function () {
                return Globalize.format(target(), "c");
            },
            write: target
        });


        result.raw = target;
        return result;
    };
} ());


ViewModel = function() {
    this.cashIsKing = ko.observable(565345.56435535).extend({ isCurrency: true});
};

ko.applyBindings(new ViewModel());

http://jsfiddle.net/5H5AK/

编辑:您可以提供带有选项的对象文字,并使用来自isCurrency扩展程序的对象文字,而不是使用true作为选项