Comment puis-je JSDoc Un Objet Imbriqué Méthodes?
J'ai essayé d'utiliser JSDoc3 pour générer la documentation sur un fichier, mais je vais avoir quelques difficultés. Le fichier (qui est un Require.js module) est à peu près comme ceci:
define([], function() {
/*
* @exports mystuff/foo
*/
var foo = {
/**
* @member
*/
bar: {
/**
* @method
*/
baz: function() { /*...*/ }
}
};
return foo;
}
Le problème est, je ne peux pas obtenir baz
à apparaître dans la documentation générée. Au lieu de cela, j'ai juste un fichier de la documentation pour un foo/foo
module, qui énumère un bar
membre, mais bar
n'a pas de baz
(juste un lien vers foo
code source).
J'ai essayé de changer bar
directive de @property
au lieu de cela, et j'ai essayé de changer baz
directive de @member
ou @property
, mais aucun de cette aide. Peu importe ce que je fais, baz ne semble pas vouloir se montrer.
Personne ne sait ce que la directive de la structure que je pourrais utiliser pour obtenir baz apparaissent dans la documentation générée?
P. S. j'ai essayé de lire des pages comme celle-ci sur le JSDoc site http://usejsdoc.org/howto-commonjs-modules.html, mais elle ne décrit que des cas de foo.bar
, pas foo.bar.baz
.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser une combinaison de @module ou @namespace avec @memberof.
MODIFIER que par Commentaire: (page Unique solution pour le module)
bar4 sans cette horrible tableau de propriété. ie @bien retiré de bar4.
Références -
*Note je n'ai pas essayé moi-même. S'il vous plaît essayer et de partager les résultats.
@namespace foo.bar
semble avoir été la pièce manquante que j'avais besoin. La seule chose qui est encore moins que l'idéal est que chaque sous-niveau (par exemple.bar
,bar2
) obtient sa propre page. Idéalement, au lieu je voudrais voirbar
etbar2
apparaissent surfoo
's page (que je suis en train de générer une page de documentation du module foo, n'est pas un tas de pages pour chaque élément de foo) ... est-il possible de faire cela?@method
tagmemberof! foo#
s'en charge déjà.Voici une façon simple de le faire:
Noter que jsdoc peut en déduire les types
baz4.baz4
ettest
sans avoir à dire @méthode et @membre.Avoir eu jsdoc3 mettre de la documentation pour les classes et espaces de noms sur le même page que le module qui les définit, je ne sais pas comment le faire.
J'ai été en utilisant jsdoc3 pendant des mois, la documentation d'un petite bibliothèque et un grande application avec elle. Je préfère plier à jsdoc3 dans certains domaines que d'avoir à taper des tonnes de @-directives pour la plier à ma volonté.
Vous ne pouvez pas le document de fonctions imbriquées directement. Je n'aime pas les Griffes de solution, j'ai donc utilisé une autre application sans espaces de noms (c'est du JS, pas Java!).
Mise à jour:
J'ai mis à jour ma réponse à refléter l'exacte cas d'utilisation donné par les OP (ce qui est juste, puisque JSdoc est assez pénible à utiliser). Voici comment il devrait fonctionner:
Malheureusement JSdoc est un port de Java, donc il a beaucoup de caractéristiques qui font sens pour Java, mais pas pour le JS, et vice-versa. Par exemple, depuis en JS fonctions sont des objets de première classe, ils peuvent être traités comme des objets ou des fonctions. Donc faire quelque chose comme cela devrait fonctionner:
Mais il n'est pas, parce que JSdoc qu'il reconnaît comme une fonction. Vous devez utiliser des espaces de noms, ma technique avec
@link
, ou d'en faire une classe:Mais alors qui n'a pas de sens. N'classes existent en JS? pas, ils n'en ont pas.
Je pense que nous avons vraiment besoin de trouver une meilleure documentation de la solution. J'ai même vu des incohérences dans la documentation avec la façon dont les types doivent être affichés (par exemple
{object}
vs{Object}
).Vous pouvez également utiliser ma technique de document fermetures.
Seulement pour améliorer le sur les Broches de la réponse un peu pour JSDoc3, je n'ai pu le faire fonctionner lorsque j'ai utilisé la @instance annotation au lieu de @membre.
ES6 exemple de code suivant: