Перетаскивание HTML - Как установить данные, полученные после разрешения обещания в событии перетаскивания? - PullRequest
0 голосов
/ 23 апреля 2019

В моем приложении, когда элемент перетаскивается, он создает ссылку и добавляет ее к переносу данных перетаскивания, чтобы его можно было удалить за пределами браузера (например, в notepad ++).

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

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

Пожалуйста, посмотрите на это fiddle .

$('#div1').on('dragstart', function (event) {
    event.originalEvent.dataTransfer.setData("text/plain", "Div1 Drag Data");
});

$('#div2').on('dragstart', function (event) {
    getURL(event);
});

function getURL(e){
    getUniqueId().then(
    function(id){
        console.log("#####");
        e.originalEvent.dataTransfer.setData("text/plain", id);
    }
  )
}

function getUniqueId(){
    var deferred = new $.Deferred();
  //deferred.resolve("kj5689fdjbgr89j");//immediate resolve
  setTimeout(function(){  deferred.resolve("kj5689fdjbgr89j"); }, 5);   
  return deferred.promise();
}

Перетаскивание 'ПервыйЭлемент 'в notepad ++ правильно помещает' Div1 Drag Data 'в notepad ++.Перетаскивание «Второго элемента» ничего не помещает в блокнот ++.Кроме того, если обещание выполнено немедленно, оно работает нормально.Но даже задержка в 5 миллисекунд приводит к тому, что она не работает.

Любой совет приветствуется.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...