2011-04-11 11 views
10

Estoy tratando de documentar el código en el siguiente formato usando jsdoc-toolkit. Me parece que las etiquetas que he usado deberían producir el resultado deseado, pero no es así. En su lugar, advierte que la clase no está documentada (porque solo está definida dentro del cierre) y no incluye la clase en la lista de miembros del espacio de nombres.Documentar una clase de javascript con prototipos en un espacio de nombres usando jsdoc-toolkit

Me gustaría documentar esto sin recurrir al uso de la etiqueta @name si es posible. ¿Alguien puede ayudar?

/** 
* @namespace The original namespace 
*/ 
var namespace = function() { 
    // private 
    /** 
    * @private 
    */ 
    function _privateMethod() { 

    }; 

    /** 
    * This is the detail about the constructor 
    * @class This is the detail about the class 
    * @param {Object} argone The first argument 
    * @param {Object} argtwo The second argument 
    */ 
    var Class = function (argone, argtwo) { 
     /** 
     * A public member variable 
     */ 
     this.member = "a member"; 
    }; 

    /** 
    * A public method 
    * @param {Object} argone The first argument 
    */ 
    Class.prototype.publicMethod = function (argone) { 

    }; 

    return /** @lends namespace */ { 
     Class: Class 
    } 
}(); 
+2

¿qué versión de JSDoc Toolkit está utilizando para generar los documentos? – Stephen

Respuesta

3

Probé un montón de cosas diferentes y esto fue lo mejor que se me ocurrió.

La primera parte ... que documenta el publicMethod en Class. Primero haga Class a memberOfnamespace y luego use @lends en el Class.prototype. Ejemplo:

/** 
* @namespace The original namespace 
*/ 
var namespace = function() { 
    // private 
    /** 
    * @private 
    */ 
    function _privateMethod() { 

    }; 

    /** 
    * This is the detail about the constructor 
    * @class This is the detail about the class 
    * @memberOf namespace 
    * @param {Object} argone The first argument 
    * @param {Object} argtwo The second argument 
    */ 
    var Class = function (argone, argtwo) { 
     /** 
     * A public member variable 
     */ 
     this.member = "a member"; 
    }; 

    Class.prototype = 
    /** @lends namespace.Class */ 
    { 
     /** a public method 
      * @param {Object} argone The first argument 
     */ 
     publicMethod: function (argone) { 

     } 
    }; 

    return { 
     Class: Class 
    } 
}(); 

Ahora, la segunda parte ... conseguir Class aparezca como en la namespace. No estoy seguro de cómo hacer eso ... lo siento! Aparecerá como namespace.Class en el índice de la clase.

0

Solo como un consejo: jsdoc 2 está lleno de errores y malas prácticas.
Considere probar JSDOC3 ->https://github.com/jsdoc3/jsdoc o no jsdoc dependiendo de la naturaleza del proyecto.

+2

JSDoc 3 tampoco funciona. Toda la herramienta es algo ridícula. – cepharum

+0

Estoy usando jsdoc3 a través de npm y está ignorando prototipos también. –

Cuestiones relacionadas