Knockout.JS:从模型到视图的不同值

时间:2011-11-15 16:01:24

标签: javascript knockout.js number-formatting

我正在使用KnockoutJS,我有一个输入控件,显示我的模型中的数字。

一切正常,但是我想在输入控件中显示之前格式化我的数字 - 但是我希望将它作为数字保存到我的视图中!所以,让我们说我有以下代码:

  

<td><input class='requiredNum' type='text' data-bind="value: testNum"></input></td>

我有一个函数toText(),可以将数字转换为我需要的数字。但是,这不起作用:

  

<td><input class='requiredNum' type='text' data-bind="value: toText(testNum)"></input></td>

我可以理解,问题是Knockoutjs不知道如何做相反的事情(从文本转换为数字) - 但这对我来说不是问题,因为我已经以另一种方式处理了这个问题。

你能推荐我一个解决方案吗?

1 个答案:

答案 0 :(得分:4)

最简单的解决方案是使用writeable dependentObservable

var viewModel = {
    number: ko.observable(10)
};

viewModel.formattedNumber = ko.dependentObservable({
  read: function() {
     //do formatting on this.number() here
     return this.number().toFixed(4);
  },
  write: function(newValue) {
     //take user input and parse into a number
     this.number(parseFloat(newValue));
  },
  owner: viewModel
});

样品: http://jsfiddle.net/rniemeyer/8bsAF/