Я пытаюсь выяснить способ передачи собственного объекта через javascript event.dataTransfer для перетаскивания. Я пишу часть редактора интерфейса CMS и хочу, чтобы пользователи могли перетаскивать элементы (из многих разных типов, начиная от файлов и заканчивая изображениями до фрагментов HTML, чтобы что угодно). Вот почему я хочу передать реальный объект, поэтому я могу прикрепить к нему данные, чтобы указать, что нужно, чтобы знать, как его отображать.
Одним из способов является использование jQuery.data() для присоединения объекта к чему-то еще на странице, а затем просто передать селекторную строку в setData... но мне это особенно не нравится.
Это также можно решить с помощью jQuery UI draggable/droppable (и я не полностью против использования каких-либо библиотек), но поскольку dropzone находится в iframe, это фактически документированная ошибка в последнем пользовательском интерфейсе jQuery ( 1.10.2). Кроме того, я бы предпочел сделать это изначально, если это возможно. В этом приложении уже достаточно библиотек.
Здесь проблема: http://jsfiddle.net/AHnh8/
var foo = {foo: "foo", bar: "bar"};
$dragme.on("dragstart", function(e) {
e.originalEvent.dataTransfer.setData("foo", foo);
});
$dropzone.on("dragenter", function(e) { e.preventDefault(); });
$dropzone.on("dragover", function(e) { e.preventDefault(); });
$dropzone.on("drop", function(e) {
console.log(e.originalEvent.dataTransfer.getData("foo")); // [Object object]
console.log(typeof e.originalEvent.dataTransfer.getData("foo")); // string
});
Теперь, прочитав спецификации, я полностью понимаю, почему это не удается. Я не понимаю, как в конечном итоге добиться того, чего я хочу.
Спасибо