2012-04-10 2 views
1

У меня есть следующий пример: http://jsfiddle.net/jLkxG/6/checkbox non boolean value?

is_checked свойство может иметь 2 значения: Да или Нет Флажок следует проверить, если значение да и когда накопленное нажатие на ссылку, то свойство должно быть назначено да или нет, в зависимости от того, установлен ли флажок.

Как вы это сделаете в нокаутах?

+2

ли вы ссылку на неправильный jsfiddle? Кажется, это не связано с вашим вопросом. –

+0

исправлена ​​ссылка. – firebird

ответ

2

Другой способ, кроме вычислений, - использовать «подписаться» для прослушивания при изменении значения. Например, привяжите значение is_checked и сделайте это значение true или false. Затем подпишитесь на это наблюдаемое и установите другое свойство Yes/No по мере необходимости. Смотрите скрипку здесь: http://jsfiddle.net/johnpapa/jLkxG/8/

HTML

<input type="checkbox" data-bind="checked: checkedvals.is_checked"/> 
<label>Test</label><br/> 

<pre data-bind="text:displayJS"> 
</pre>​ 

JavaScript

var viewModel = (function() { 
    var self = this; 
    self.checkedvals = { 
     is_checked : ko.observable(true), 
     is_checked_val : ko.observable("Yes") 
    }; 
    self.checkedvals.is_checked.subscribe(function(){ 
     self.checkedvals.is_checked_val(self.checkedvals.is_checked() ? "Yes" : "No"); 
    }); 

    self.displayJS = ko.computed(function() { 
     return JSON.stringify(ko.toJS(checkedvals), null, 2); 
    }); 
})(); 
ko.applyBindings(viewModel);​ 
3

Ваша первая проблема заключается в том, что вы пропустили скобки на вашем Переплет:

<input type="checkbox" value="Yes" data-bind="checked: is_checked() == 'Yes'"/> 

Теперь флажок будет правильно проверяться на нагрузке.

Большая проблема заключается в том, что при нажатии на этот флажок не будет записываться значение обратно. Если вы измените is_checked() на bool, это будет нормально работать. Так что если у вас есть:

self.is_checked = ko.observable(true); 

и

data-bind="checked: is_checked" 

Он будет работать. Если снять флажок, будет обновлено значение is_checked. Если для вас действительно важно, чтобы это было Yes/No, а не True/False, вам нужно будет написать код для перевода состояния проверки подлинности/ложности в Да/Нет. Это можно сделать несколькими способами. Я бы попытался вычислить наблюдаемый. См. Здесь: http://jsfiddle.net/jLkxG/7/