Нокаут разрешает привязку не работать

Я не могу заставить привязку enable работать в Knockout JS. Если для свойства enabled установлено значение false, кнопка не отключена, и я все еще могу щелкнуть ее.

см. fiddle

<a  class="btn btn-xl btn-primary" 
    href="#" 
    role="button" 
    data-bind="enable: enabled, click: clicked, visible: isVisible">
        <i class="icon-only icon-ok bigger-130"></i>
</a>      

var ViewModel = function(){
    var self = this;

    self.enabled = ko.observable(false);
    self.isVisible = ko.observable(true);
    self.clicked = function(){
        alert('You clicked the button');
    };
};

$(function(){
    var model = new ViewModel();
    ko.applyBindings(model);
})          

Ответ 1

Enable привязка не работает ни с чем.

Это полезно с элементами формы, такими как input, select и textarea Он также работает с кнопками. Как в моем примере http://jsfiddle.net/5CbnH/1/

Но это не работает с вашей ссылкой. Вы используете twitter bootstrap и включаете/выключаете свои "кнопки" с помощью классов css. Таким образом, вы должны использовать привязку css следующим образом:

data-bind="css: { yourClass: enabled }"

Проверьте, какой класс отвечает за загрузку, чтобы показать ваш "button" и соответствующим образом изменить ваш код с помощью css-привязки.

Ответ 2

Правильно:

включить
запрещать

Неправильно:

включен
отключен


Убедитесь, что вы используете disable вместо disabled и enable вместо enabled.

<input type="text" data-bind="value: foo, enable: isEditing"/>   YES!!
<input type="text" data-bind="value: foo, enabled: isEditing"/>   NO!

Легкую ошибку сделать :-)

Ответ 3

Для тех, кто может найти это в поиске:

У меня возникла проблема с тем, что привязка enable также работает. Моя проблема заключалась в том, чтобы использовать сложное выражение без ссылки на наблюдаемые функции:

<input type="button" data-bind="enable:AreAllStepsVerified && IsFormEnabled, click:SubmitViewModel"/>

Должно быть:

<input type="button" data-bind="enable:AreAllStepsVerified() && IsFormEnabled(), click:SubmitViewModel"/>

Смотрите: fooobar.com/questions/181331/...

Ответ 4

Что сказал Сальвадор в своем ответе.

Вы должны понимать, что привязка enabled и disabled в нокауте работает, помещая атрибут disabled в целевой элемент DOM. Теперь, если вы посмотрите на документацию HTML, вы заметите, что не все элементы HTML поддерживают этот атрибут.

Фактически только элементы формы (например, <button>) делают. <a> нет.

Ответ 5

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

Обновлен fiddle.

<button  class="btn btn-xl btn-primary" 
    role="button" 
    data-bind="enable: enabled, click: clicked, visible: isVisible">
        <i class="icon-only icon-ok bigger-130"></i>
</button>