Mam problem z napisaniem mojej dokumentacji dla zestawu zgrupowanych modułów. Sądzę, że częściowo jest to błędne przekonanie co do tego, co reprezentują. (A może wynika to z tego, że Yahoo próbuje zestawić "klasyczne" słownictwo językowe w JS).Dokumentacja klas i modułów w YUIDocs
Poniżej przedstawiam, w jaki sposób napisano większość mojego kodu i próbę jego udokumentowania w YUIDoc -styl. Pierwsze dwie części (Foo
i BazManager
) są dość proste. Dla mnie:
Foo
to@class
;Baz
jest@class
;BazManager
to@module
(lub może@class
, który zawiera tylko@static
członków);Qux
to także@module
, ale zawiera tylko metody.
Moje problemy to:
- Jeśli
BazManager
jest@module
,Foo
pokazuje się podBazManager
; - Jeśli
BazManager
jest@class
, metody wewnątrzBaz
zostaną wessane do niego, jeśli nie dodasz do wszystkiego@for
; - Jeśli
BazManager
jest@class
, to dokumentacja widocznościBaz
staje się naprawdę trudna; - Naprawdę nie wiem, jak mam udokumentować
Qux
. Wydaje mi się, że jest to moduł, ale ponieważ nie ma on żadnych znaczników, to pożera wszystko wokół niego, w tymBazManager
. Więc musi to być@class
.
Czy ktoś może zasugerować, w jaki sposób powinienem to zrobić? Naprawdę nie obchodzi mnie, czy otrzymam odpowiednie warunki, o ile wszystko w dokumentacji zostanie wygenerowane poprawnie.
Oto mój przykładowy kod:
// 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;
}());
próbowałeś wprowadzenie klas w osobnych plikach? –
Nie, ale nie sądzę, że dokumentacja powinna wymuszać układ projektu. Zaczynam podejrzewać, że w moim kodzie 'MyNamespace' faktycznie jest modułem, a wszystkie' Foo', 'BazManager' i' Qux' to '@ class'es. – Andrew
Tak, myślę, że twój komentarz jest odpowiedzią. Zobacz, co YUI Doc mówi o modułach w [składnia ref] (http://yui.github.com/yuidoc/syntax/index.html): Wymaga modułu na drzewo źródłowe i czasami nie jest jasne, co jest moduł. Niech MyNameSpace będzie modułem i przestrzenią nazw? –