Question

J'ai une question sur la déclaration du Dojo.J'ai remarqué dans la déclaration AMD de la bibliothèque requise pour le dojo que certaines bibliothèques n'ont pas de nom déclaré dans le paramètre funciton.Comment savoir lequel n’a pas de paramètre ?

Par exemple:

Pour la requête de sélection, j'ai vu un exemple qui ne donne pas de nom pour dojo/NodeList-dom et dojo ready.

require(["dojo/query", "dojo/dom-class", "dojo/on", "dojo/NodeList-dom", "dojo/domReady!"], function(query, domClass, on) {

Est-ce simplement facultatif de leur donner des noms ?Donc si je ne veux pas de déclaration pour leur nom, je dois les placer en fin de liste ?

Ou puis-je leur donner des noms arbitraires ?J'ai vu un exemple qui donne des noms à domReady avec une variable nommée "request".

Je suppose que c'est correct ?

require(["dojo/query", "dojo/dom-class", "dojo/on", "dojo/NodeList-dom", "dojo/domReady!"], function(query, domClass, on, nodeList, request) {

Alors que ce n'est pas le cas ?

// No name for NodeList-dom
require(["dojo/query", "dojo/dom-class", "dojo/on", "dojo/NodeList-dom", "dojo/domReady!"], function(query, domClass, on, request) {

De plus, comment savoir si vous avez besoin d'un nom pour eux, puis-je simplement n'en nommer aucun ?

Était-ce utile?

La solution

Vous pouvez choisir ce que vous nommez ou non.Cela dépend de ce que fait le module et si vous avez besoin du paramètre de rappel pour travailler avec lui.Par exemple, le dojo/query module est utile pour interroger les nœuds DOM, mais vous ne pouvez pas l'utiliser sans une référence réelle à celui-ci (le paramètre de fonction).

En revanche, des modules comme dojo/NodeList-dom prolonger le dojo/query module, vous n'aurez pas besoin de leur rappel pour faire des choses avec.


Les widgets peuvent être utiles avec ou sans paramètre de rappel.Si vous utilisez des widgets déclaratifs, vous n'avez pas besoin du rappel tandis que si vous les créez par programme, vous avez besoin du widget pour l'instancier, par exemple :

require(["dijit/form/FilteringSelect"], function(FilteringSelect) {
    return new FilteringSelect({});
});

Alors que de manière déclarative, vous n'avez besoin que de :

require(["dijit/form/FilteringSelect", "dojo/parser"], function() {

});

Mais même si votre module n'a pas pour vocation d'avoir un paramètre de rappel (par exemple dojo/NodeList-dom), vous pouvez quand même les nommer :

require(["dojo/NodeList-dom"], function(NodeList) {

});

Mais ils ne vous seront pas utiles.Vous pouvez donc nommer tous les modules si vous trouvez cela plus simple.

La meilleure façon de savoir si vous devez le nommer ou non est de regarder comment ils sont utilisés au niveau guide de référence.Si vous voyez que le paramètre callback est utilisé pour appeler les fonctions du module, par exemple :

require(["dojo/query", "dojo/NodeList-dom", "dojo/domReady!"], function(query) {
    query("#myNode").forEach(function(node) {
        console.log(node);
    });
});

Nous utilisons le query rappel pour interroger #myNode, nous devons donc le nommer.Cependant, le dojo/NodeList-dom prolonge le query (avec par exemple le forEach() fonction), nous n’avons donc pas besoin de le nommer.

Le dojo/domReady! Le module/plugin n'a pas besoin d'être nommé non plus.Ce module garantira que la fonction de rappel n'est appelée que lorsque le DOM est chargé.


Une remarque importante est que l'ordre des paramètres de rappel est le même que l'ordre des modules.Même si un module ne renvoie pas un objet approprié que vous pouvez utiliser, cela compte quand même.Par exemple (ce qui suit ne fonctionnera pas) :

require(["dojo/NodeList-dom", "dojo/query", "dojo/domReady!"], function(query) {
    query("#myNode").forEach(function(node) {
        console.log(node);
    });
});

Beaucoup de gens pensent cela, parce que dojo/NodeList-dom ne renvoie pas un objet utile, ils peuvent simplement le laisser ainsi, mais ce n'est pas vrai.Le query Le paramètre de rappel contiendra en fait les données renvoyées par dojo/NodeList-dom dans cet exemple (car c'est le premier paramètre), quelles que soient ces données.

Donc, si vous n'avez pas réellement besoin du paramètre de rappel du module, le plus simple est de l'ajouter à la fin de la liste des modules ou vous pouvez procéder comme suit (comme je l'ai expliqué précédemment) :

require(["dojo/NodeList-dom", "dojo/query", "dojo/domReady!"], function(NodeList, query) {
    query("#myNode").forEach(function(node) {
        console.log(node);
    });
});

Cet exemple fonctionnera, cependant, pour d'autres développeurs (en lisant votre code), cela peut prêter à confusion car ils pourraient penser qu'ils peuvent utiliser le NodeList paramètre.Donc, pour que votre code reste lisible, je vous suggère de simplement mettre dojo/NodeList-dom à la fin de la liste des modules.


Voyons maintenant si nous pouvons répondre à vos exemples de code :

Votre premier exemple est correct, comme je viens de l'expliquer. dojo/NodeList-dom et dojo/domReady! ne rendez pas les objets utiles, vous pouvez donc les laisser de côté.

Votre deuxième exemple est également correct.Vous pouvez quand même choisir de nommer ces modules, même si vous n'utilisez pas leur rappel.

Le troisième exemple est également correct, cependant le request Le paramètre contiendra le dojo/NodeList-dom rappel et pas le dojo/domReady! rappeler.Vous pouvez choisir comment vous les nommez.Que cela fonctionne ou non dépend de ce que vous allez faire avec le request rappeler.Je veux dire, l'exemple suivant fonctionnera également :

require(["dojo/query", "dojo/NodeList-dom", "dojo/domReady!"], function(NodeList, domReady, query) {
    NodeList("#myNode").forEach(function(node) {
        console.log(node);
    });
});

Mais dans ce cas, le NodeList Le paramètre de rappel contient le résultat de dojo/query, domReady contient le résultat de dojo/NodeList-dom et query contient le résultat de dojo/domReady!.Aussi déroutant que cela puisse paraître, cela fonctionnera.Mais comme vous pouvez le voir, pour interroger #myNode J'ai besoin du résultat de dojo/query, lequel est NodeList dans ce cas.Déroutant, n'est-ce pas ?C'est pourquoi il faut choisir des noms propres.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top