And*_*rew 8 javascript yui documentation-generation
我在编写一组分组模块的文档时遇到了一些麻烦.我认为这是部分在什么误解@class,@module和@namespace代表.(或许这可能是雅虎试图将"古典"语言词汇用于制作JS的结果.)
我在下面有一个粗略的示例,显示了我的大部分代码是如何编写的,以及我尝试以YUIDoc风格记录它.前两部分(Foo和BazManager)非常简单.对我来说:
Foo是一个@class;Baz是一个@class;BazManager是一个@module(或者@class只包含@static成员);Qux也是一个@module但只包含方法.我的问题是:
BazManager是a @module,则Foo显示在BazManager;BazManager是a @class,Baz如果你不添加@for所有东西,那么里面的方法会被吸进去;BazManager是a @class,则记录Baz的可见性变得非常棘手;Qux.在我看来,它是一个模块,但由于它没有@classes,它会吞噬它周围的一切,包括BazManager.所以它必须是一个@class.任何人都可以建议我应该这样做吗?只要文档中的所有内容都正确生成,我就不在乎我是否正确使用这些条款.
这是我的示例代码:
// 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;
} ());
Run Code Online (Sandbox Code Playgroud)
在YUIDoc @class中,它既用于经典类,也用于包含一堆方法的对象.要实例化的类也标有@constructor.这主要是因为这些类随后在模板中显示的方式.跟踪一个类比许多单独的函数容易得多.
YUI团队和社区中的许多人(包括我自己)似乎正在离开@namespace.很难做对.相反,我们正在编写带有点的类名,即:@class Plugin.NodeMenuNav.
模块在YUI意义上是指,并且大多数可以理解为包含一个或多个类的"脚本".
所以典型的模块看起来像这样:
/**
A series of utilities to do stuff
@module Stuff
**/
/**
A class that does foo very well
@class Foo
@constructor
@param {Object} [config] Configuration object
@param {Boolean} [config.jumpHigh] Whether foo should jump really high
**/
function Foo(config) {
config = config || {};
var high = config.jumpHigh;
}
/**
@method jump
@chainable
**/
Foo.prototype.jump = function () {
// jump
return this;
};
/**
A series of utilities to make Foo do more stuff
@class FooUtils
**/
var FooUtils = {
/**
@method doSomeStuff
@static
**/
doSomeStuff: function () {
}
};
Run Code Online (Sandbox Code Playgroud)
最后,@for适用于扩展其他模块的模块.例如,您可以使用模块Bar将方法添加到Foo的原型:
/**
Adds extra functionality to Foo
@module Bar
**/
/**
Run really fast
@method run
@for Foo
**/
Foo.prototype.run = function () {};bv
Run Code Online (Sandbox Code Playgroud)