Knockout.JS: различные значения от модели к представлению - PullRequest
1 голос
/ 15 ноября 2011

Я использую 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 Ответ

4 голосов
/ 15 ноября 2011

Самое простое решение - использовать доступный для записи зависимый наблюдатель .

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/

...