Условное связывание 'click' с нокаутом

Я привязываю событие click к каждому элементу списка в списке:

        <ul class="modal-subject-list" data-bind="foreach: filteredSubjects">
            <li data-bind="click: $parent.pickSubject, css: {alreadyAddedBackground: hasBeenAdded}">
                <!-- Lots of code here -->
            </li>
        </ul>

Я хочу отключить привязку click:, если "hasBeenAdded" разрешает true. Я знаю некоторые грязные способы позаботиться об этом:

  • Есть два элемента списка: один для if: hasBeenAdded, а другой для if: !hasBeenAdded. Это далеко от DRY
  • Обработайте эту проверку с помощью javascript и оставите представление в одиночку. Мне это не нравится, потому что создается ненужная разметка для элементов списка, которые должны быть существенно отключены.

Есть ли способ зарегистрировать привязку "clickIf"?

Ответы

Ответ 1

Сделайте это

    <ul class="modal-subject-list" data-bind="foreach: filteredSubjects">
        <li data-bind="click: hasBeenAdded ? null : $parent.pickSubject">
            <!-- Lots of code here -->
        </li>
    </ul>

http://jsfiddle.net/7hcj6/

Чтение -

Если файл filterSubject добавлен, ничего не делать, иначе добавьте его в список или что-то еще.