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

发布于 2024-12-16 12:01:59 字数 518 浏览 2 评论 0原文

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

一切正常,但是我想在输入控件中显示我的数字之前对其进行格式化 - 但我想将其保留为我的视图中的数字!所以,假设我有以下代码:

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

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

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

I am using KnockoutJS and I have an input control that displays a number from my model.

Everything works fine, however I'd like to format my number before displaying it in the input control - but I want to keep it as a number to my view! So, let's say that I have the following code:

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

I have a function toText() that converts the number to what I need. However, this doesn't work:

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

I can understand that the problem is that Knockoutjs doesn't know how to do the opposite (convert from text to number) - however this is not a problem to me because I already handle that in another way.

Can you recommend me a solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风流物 2024-12-23 12:01:59

最简单的解决方案是使用可写 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/

The easiest solution is to use a 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
});

Sample:
http://jsfiddle.net/rniemeyer/8bsAF/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文