AngularJS и ui-sortable (ветка 1.2): ng-mouseover прерывается после сортировки

Я обновил свое приложение до AngularJS 1.2, а также перешел на ui-sortable v 1.2.

Сортировка реализована для Accordion-Groups (из ui-bootstrap). С версией sortable для мастер-дерева я мог слушать ng-mouseover/ng-mouseleave внутри заголовков аккордеона, но с версией 1.2 события мыши прослушиваются только до тех пор, пока я не выполняю сортировку. После внесения любых изменений в порядок сортировки события мыши становятся глухими...

Вот плункер: http://plnkr.co/edit/n8yms9pb7uJp77zZ9LFK?p=preview

Может ли кто-нибудь дать мне совет, как это исправить? Спасибо


person Markus Kösel    schedule 11.12.2013    source источник
comment
Вероятно, не стоит использовать ссылки raw.github.com в вашем планке: Refused to execute script from 'https://raw.github.com/angular-ui/ui-sortable/angular1.2/src/sortable.js' because its MIME type ('text/plain') is not executable, and strict MIME type checking is enabled.   -  person Ben Lesh    schedule 11.12.2013
comment
каким будет правильный путь? Sortable не может быть найден через Find external Libraries.   -  person Markus Kösel    schedule 11.12.2013
comment
понял: обновлено до ссылок rawgithub.com   -  person Markus Kösel    schedule 11.12.2013


Ответы (2)


Проблема идентичности.

elementInsertedByDropping !== elementSelectedAndDragged

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

Я сам изучаю Angular, и у меня тоже проблемы с ui-sortable; прошу не считать мое мнение окончательным. Однако я считаю, что проблема в том, что прослушиватели $watch должны быть повторно привязаны к новому элементу, поскольку он создается асинхронно вне Angular.

Документация ng.$rootScope.Scope довольно четко описывает эту ситуацию в разделе $apply. Если я прав, вам потребуется либо $scope.$apply(...) код в вашем контроллере, либо [предпочтительно] написать пользовательскую директиву, которая обрабатывает вставку.

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

Если я смогу предоставить более точную информацию позже, я пересмотрю этот ответ; Я все еще изучаю этот материал сам, и я хотел бы знать, как сделать что-то очень похожее.


[изменить: Я недостаточно хорошо знаком с Angular-UI-Sortable, чтобы понять, является ли это ошибкой или просто недостающей функциональностью.]

person muddletoes    schedule 11.12.2013
comment
Спасибо за ваши подсказки. Я подумаю о более внимательном рассмотрении Директивы Михала Острушкаса, если не смогу решить проблему с официальной. Но, как упоминает @blesh, отправка вопроса на github может быть способом на данный момент... - person Markus Kösel; 11.12.2013

Похоже на ошибку в ui-sortable.

Мое предположение: кажется, что он теряет привязки из директив событий, вероятно, потому, что он уничтожает старые элементы DOM и создает новые без повторного присоединения области действия с помощью $compile. Я бы сохранил этот планк и отправил его в их репозиторий GitHub

person Ben Lesh    schedule 11.12.2013