Нокаут "если" привязка не работает с выражением в сортируемом списке?

Я просто столкнулся с другой проблемой, связанной с моим сортируемым списком дел, созданным с помощью плагинов Knockout и Knockout-sortable.

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

Я пробовал с "видимой" привязкой, и она работает каким-то образом, но привязка visibile просто скрывает элемент DOM, и это портит сортируемый arrayIndex, добавляя к нему ненужный элемент.

<div class="delimiter" data-bind="visible: time() == $root.limit()"></div>

Связывание "if" было бы лучше, потому что оно вставляет элемент DOM только в случае необходимости, но выражение, которое я использовал с visible, всегда оценивается как true, и я не могу понять, почему...

<div class="delimiter" data-bind="if: time() == $root.limit()"></div>

Вот скрипка: http://jsfiddle.net/ingro/VaqqF/

Любая помощь приветствуется, спасибо!

1 ответ

Решение

Вы просто неправильно поняли if-привязку: он удаляет содержимое узла, к которому он был применен, а не сам узел. Если вы хотите удалить узел, не создавая обертку вокруг него (которую вы можете использовать для добавления привязки), существует также версия комментария для if-привязки, называемая синтаксисом потока управления без контейнеров:

<!-- ko if: time() == $root.limit() -->
  <div class="delimiter"></div>
<!-- /ko -->

http://jsfiddle.net/VaqqF/11/

Ссылка: http://knockoutjs.com/documentation/if-binding.html

Другие вопросы по тегам