2013-03-27 3 views
0

Описание:флажок и поле ввода корреляции в нокауте

У меня есть две вещи, флажок и поле ввода. Вот что я хочу. В моей модели просмотра у меня есть два наблюдаемых, один из которых сохраняет флажок check/uncheck (ture или false), а другой, который сохраняет значение поля ввода. Оба эти значения берутся из базы данных, но у меня они статичны для упрощения. Таким образом, когда страница загружается, и если значение флажка истинно, поле ввода должно быть включено, и оно должно отображать значение. Флажок также должен отображаться как отмеченный. Если флажок не установлен, значение поля ввода должно быть равно нулю, а поле ввода должно быть отключено. Если флажок установлен после снятия флажка, значение поля ввода должно быть равно нулю.

Fiddle:

data-bind="checked: boxChecked" type="checkbox" ></input> 
    <br/> 
    Result: 
    <input data-bind="enable: boxChecked() == true, 
         value: boxCheked() = true ? result : result = 0" type="text"></input> 

http://jsfiddle.net/KGSUD/1/

Я играл вокруг с скрипку в течение достаточно долгого времени, но не мог понять это.

Буду признателен вам за помощь.

ответ

2

Я бы выбрал логику из представления (HTML) и поместил ее в ViewModel.

Html:

<input data-bind="checked: boxChecked" type="checkbox" ></input> 
<br/> 
Result: 
<input data-bind="enable: boxChecked, value: result" type="text"></input> 

JS:

var ViewModel = function() { 
    var self = this; 
    self.boxChecked = ko.observable(true); 
    self.result = ko.observable('10'); 

    self.boxChecked.subscribe(function(newValue) { 
     if (!newValue) 
      self.result("0"); 
    }); 
}; 

подписка будет принимать от установки result, HTML-переплеты становятся проще. Вот the fiddle

+0

Есть ли способ сделать значение ноль, если флажок снят при загрузке страницы? И почему я не могу это сделать? Я имею в виду, не будет ли это работать? – Stranger

+1

Да, вы можете применить это в конструкторе viewmodel. Кроме того, вы можете помещать что угодно, если хотите (пока оно работает), но рекомендуется использовать нокаут с шаблоном MVVM и, как правило, приводит к более многоразовому коду. Бизнес-логика как * установка свойства viewmodel на определенное значение, основанное на некотором условии * в представлении, противоречит шаблону MVVM, поскольку бизнес-логика принадлежит модели viewmodel. Только логика, связанная с тем, как отображать информацию, должна когда-либо быть в представлении. Но, как всегда, существуют исключения, используйте ваше мнение и т. Д. – Tyrsius

+0

спасибо. Я действительно реализую ваше решение, и я получаю checkbox как проверенный независимо от того, является ли значение true или false. Не знаю, как это решить. Я уверен, что это не имеет никакого отношения к вашему решению, так как ваш пример отлично работает. – Stranger

Смежные вопросы