Использование jQuery UI drag/drop с помощью backbone.js

Одна из особенностей моего приложения Backbone включает в себя объединение моделей типа A с моделями типа B, которые выполняются путем перетаскивания представления A в вид B. В классе B view Я слушаю событие drop и из этого получаю элемент DOM вида A, но нет информации о модели A.

Какой лучший способ получить эту информацию? Мои лучшие догадки пока

  • иметь модель A сохранить ссылку на себя в пространстве имен приложений, удалив эту ссылку при завершении перетаскивания, если обработчик drop еще не сделал этого.
  • запустить событие на вид A, передав ссылку на модель B вместе с событием, а затем с помощью модели A вызовите метод модели B...
  • сохранить модель A в качестве атрибута $.data вида A

но все эти подходы кажутся запутанными/неэлегантными.

Ответ 1

Сохранение в качестве атрибута данных на самом деле довольно чистое, а производительность не будет плохой. Вы можете сохранить атрибут cid модели cid в DOM el и использовать метод коллекции getByCid для извлечения модели.

Ответ 2

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

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

Ваши упомянутые решения также будут работать, однако я чувствую, что решение A кажется немного хакерским, решение B является менее чистым кодом, а решение C по сути аналогично использованию атрибута data.