Ho un po 'di problemi a scrivere la mia documentazione per un insieme di moduli raggruppati. Penso che sia in parte un equivoco su cosa rappresentano @class
, @module
e @namespace
. (O forse è il risultato di Yahoo cercando di calzare un vocabolario "classico" in JS.)Documentazione di classi e moduli in YUIDocs
Ho un campione sgrossato di seguito che mostra come la maggior parte del mio codice è scritto e il mio tentativo di documentarlo in YUIDoc -stile. Le prime due parti (Foo
e BazManager
) sono piuttosto semplici. Per me:
Foo
è un@class
;Baz
è un@class
;BazManager
è un@module
(o forse un@class
che contiene solo membri@static
);Qux
è anche un@module
ma contiene solo metodi.
I miei problemi sono:
- Se
BazManager
è un@module
,Foo
si presenta sottoBazManager
; - Se
BazManager
è un@class
, i metodi all'interno diBaz
vengono risucchiati in esso se non si aggiunge@for
a tutto; - Se
BazManager
è un@class
, documentare la visibilità delloBaz
diventa davvero complicato; - Non so davvero come dovrei documentare
Qux
. Mi sembra un modulo, ma dal momento che non ha uno@class
, mangia tutto ciò che lo circonda, incluso loBazManager
. Quindi deve essere un@class
.
Qualcuno può suggerire come dovrei farlo? Non mi interessa davvero se ottengo i termini giusto finché tutto nella documentazione viene generato correttamente.
Ecco il mio codice di esempio:
// File: Widgets.js
/**
MyNamespace namespace
@namespace MyNamespace
*/
var MyNamespace = window.MyNamespace || {};
//--------------------PART 1: Foo-------------------//
/**
This is a description of Foo.
@class Foo
*/
MyNamespace.Foo = function() {
this.toString = function() {
return "I am a foo";
};
/**
This is Foo's private method description.
@method privateMethod
@private
*/
var privateMethod = function() {};
/**
This is Foo's public method description.
@method publicMethod
*/
this.publicMethod = function() {};
};
//--------------------PART 2: Baz-------------------//
/**
This is a description of BazManager.
@module BazManager
@namespace MyNamespace
*/
MyNamespace.BazManager = (function() {
var self = {};
/**
This is a description of Baz.
@class Baz
*/
var Baz = function (type) {
/**
toString description
@method toString
@returns {String}
*/
this.toString = function() {
return "I am a baz and I'm " + type;
};
};
/**
This is BazManager's privateBaz description.
@method privateBaz
@private
*/
var privateBaz = new Baz("private");
/**
This is BazManager's publicBaz description.
@method publicBaz
*/
self.publicBaz = new Baz("public");
return self;
}());
//--------------------PART 3: Qux-------------------//
MyNamespace.Qux = (function() {
var self = {};
/**
execute description
@method execute
@private
*/
var execute = function() {
console.log("Qux is done");
};
/**
start description
@method start
*/
self.start = function() {
setTimeout(execute, 1000);
};
return self;
}());
Hai provato a mettere le classi in file separati? –
No, ma non penso che la documentazione debba imporre il layout di un progetto. Comincio a sospettare che nel mio codice, 'MyNamespace' sia effettivamente il modulo e tutti i' Foo', 'BazManager' e' Qux' sono '@ class'es. – Andrew
Sì, penso che il tuo commento sia la risposta. Guarda cosa dice Doc YUI sui moduli in [ref sintassi] (http://yui.github.com/yuidoc/syntax/index.html): Richiede un modulo per albero di sorgenti e che a volte non è ovvio cosa sia un modulo. Lascia che MyNameSpace sia un modulo e uno spazio dei nomi? –