Ich habe ein paar Probleme mit dem Schreiben meiner Dokumentation für eine Gruppe von gruppierten Modulen. Ich denke, es ist teilweise ein Missverständnis darüber, was @class
, @module
und @namespace
darstellen. (Oder vielleicht ist es ein Ergebnis von Yahoo, der versucht, ein 'klassisches' Vokabular in JS zu schüren.)Dokumentation von Klassen und Modulen in YUIDocs
Ich habe unten ein grobes Beispiel, das zeigt, wie der meiste Code geschrieben ist und mein Versuch, ihn in YUIDoc zu dokumentieren -Stil. Die ersten beiden Teile (Foo
und BazManager
) sind ziemlich einfach. Zu mir:
Foo
ist ein@class
;Baz
ist ein@class
;BazManager
ist eine@module
(oder vielleicht eine@class
, die nur@static
Mitglieder enthält);Qux
ist auch eine@module
aber enthält nur Methoden.
Meine Probleme sind:
- Wenn
BazManager
ein@module
ist,Foo
zeigt sich unterBazManager
; - Wenn
BazManager
ein@class
ist, werden die Methoden innerhalbBaz
hineingesaugt, wenn Sie nicht@for
zu allem hinzufügen; - Wenn
BazManager
ein@class
ist, dann wird die Sichtbarkeit vonBaz
wirklich schwierig; - Ich weiß wirklich nicht, wie ich
Qux
dokumentieren soll. Es scheint mir ein Modul zu sein, aber da es keine@class
es hat, verschlingt es alles um ihn herum, einschließlichBazManager
. Also muss es ein@class
sein.
Kann jemand vorschlagen, wie ich das tun sollte? Es ist mir egal, ob die Bedingungen richtig sind, solange alles in der Dokumentation richtig generiert wird.
Hier ist mein Beispielcode:
// 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;
}());
Haben Sie versucht, die Klassen in separate Dateien zu setzen? –
Nein, aber ich denke nicht, dass die Dokumentation ein Projektlayout erzwingen sollte. Ich fange an zu vermuten, dass in meinem Code 'MyNamespace' tatsächlich das Modul ist und alle' Foo', 'BazManager' und' Qux' sind '@ class's. – Andrew
Ja, ich denke, dein Kommentar ist die Antwort. Sehen Sie sich an, was YUI Doc über Module in [Syntaxreferenz] (http://yui.github.com/yuidoc/syntax/index.html) sagt: Es erfordert ein Modul pro Quellbaum und es ist manchmal nicht offensichtlich, was es ist ein Modul. Soll MyNameSpace ein Modul und ein Namespace sein? –