web-dev-qa-db-fra.com

Obtenir une instance / un objet Dropzone à l'aide de jQuery

J'utilise jQuery pour travailler avec dropzone. par exemple.

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

J'ai besoin d'obtenir l'instance Dropzone pour pouvoir appeler cette méthode:

myDropzone.processQueue()

Comment puis-je atteindre cet objectif? C'est possible?

en d'autres termes, comment puis-je initialiser la zone de dépôt à l'aide

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

mais en même temps obtenir l'instance de l'objet comme si je l'initialisais en utilisant:

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

donc je peux appeler:

myDropzone.processQueue()

Merci beaucoup.

21
preston

Le script semble ajouter un objet dropzone au element donné. Vous pouvez donc faire quelque chose comme ceci:

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

Comme décrit dans problème # 18

Vous pouvez également utiliser la fonction intégrée Dropzone.forElement.

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

Un moyen facile d'accéder à l'instance avec jQuery, si elle a déjà été initialisée:

var dropzone = $(this).get(0).dropzone;
4
Fabian von Ellerts

c'est simple avec Dropzone.instances vérifier avec id de l'élément:

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;
}
1
Vuong Passion

Comme indiqué précédemment, vous pouvez utiliser forElement de dropzone, qui à son tour vérifie simplement element.dropzone, où 'element' est le natif (pas jquery obj). Donc, pour fusionner, résumer, expliquer et développer les réponses précédentes, vous pouvez faire comme ceci:

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

ou mieux, tout simplement en js:

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

puis obtenez la dropzone comme ceci:

element.dropzone

Ou, plus concis (plain js here):

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

Juste pour référence, la source forElement de la dropzone actuelle:

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;
};
1
Luca Reghellin