Получить экземпляр/объект Dropzone с помощью jQuery

Я использую jQuery для работы с dropzone. например.

$("#mydropzone").dropzone({ /*options*/ });

Мне нужно получить экземпляр Dropzone, чтобы я мог вызвать этот метод:

myDropzone.processQueue()

Как я могу это достичь? Возможно ли это?

Другими словами, как я могу инициализировать зону сбрасывания с помощью

$("#mydropzone").dropzone({ url: "/file/post" });

но в то же время получите экземпляр объекта, как если бы я инициализировал его, используя:

var myDropzone = new Dropzone("#mydropzone", { url: "/file/post"});

поэтому я могу позвонить:

myDropzone.processQueue()

Большое спасибо.

Ответ 1

script, кажется, добавляет объект dropzone к данному element. Итак, вы можете сделать что-то вроде этого:

var $dropZone = $("#mydropzone").dropzone({ /*options*/ });
// ...
$dropZone[0].dropzone.processQueue();

Ответ 2

Как описано в issue # 180

Вы также можете использовать встроенную функцию Dropzone.forElement.

var myDropzone = Dropzone.forElement("#mydropzone");

Ответ 3

Простой способ получить доступ к экземпляру с помощью jQuery, если он уже был инициализирован:

var dropzone = $(this).get(0).dropzone;

Ответ 4

Как указывалось ранее, вы можете использовать forElement, который, в свою очередь, просто проверяет element.dropzone, где "element" является нативным (не jquery obj). Итак, чтобы объединить, обобщить, объяснить и расширить предыдущие ответы, вы можете сделать так:

var element = $("#mydropzone")[0]; // this is the way jquery gives you the original dom

или лучше просто в js:

var element = document.querySelector("#mydropzone");

затем получите дропзону вот так:

element.dropzone

Или, более кратко (просто js здесь):

var dzone = document.querySelector("#mydropzone").dropzone

Просто для справки, текущий источник forElement:

Dropzone.forElement = function (element) {
  if (typeof element === "string") {
    element = document.querySelector(element);
  }
  if ((element != null ? element.dropzone : undefined) == null) {
    throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the 'init' option to setup any additional observers on your Dropzone.");
  }
  return element.dropzone;
};

Ответ 5

Это кажется простым с проверкой Dropzone.instances с идентификатором элемента:

function fn_check_has_dropzone_instances(id){
    var found = false;
    Dropzone.instances.forEach(function(item,index){
        if($($(item)[0].element).attr('id').trim()==id.trim()){
            console.log(id);
            found = true;
        }
    });
    return found;
}