Knockout JS + JQuery UI - Проблемы с удалением элементов из наблюдаемого массива после его переупорядочения

0

У меня есть наблюдаемый массив, связанный с списком, который использует JQuery-ui для переупорядочения с перетаскиванием. Я также хочу, чтобы удалять элементы из наблюдаемого массива. Кажется, что все работает нормально, пока я не попытаюсь удалить элемент, который уже был переупорядочен.

Рассмотрим следующий код JsFiddle: http://jsfiddle.net/4mMfE/

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

Кто-нибудь знает, как заставить это работать, как ожидалось?

У меня такое чувство, что оно имеет какое-то отношение к тому, что наблюдаемый массив viewModel не синхронизируется с фактическим порядком элементов, отображаемых на странице.

.
Теги:
knockout.js

2 ответа

3
Лучший ответ

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

Вам нужна настраиваемая привязка, которая прослушивает события переупорядочения и соответственно обновляет модель. Удобно это уже существует для jQuery UI sortable: https://github.com/rniemeyer/knockout-sortable

  • 0
    Это отличная библиотека, именно то, что мне нужно. Спасибо, что поделился.
0

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

Просто измените функцию removeItem на это и убедитесь сами.

alert(self.items().slength);
self.items.remove(data);
alert(self.items().slength);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню