YUIDocs中的类和模块的文档

And*_*rew 8 javascript yui documentation-generation

我在编写一组分组模块的文档时遇到了一些麻烦.我认为这是部分在什么误解@class,@module@namespace代表.(或许这可能是雅虎试图将"古典"语言词汇用于制作JS的结果.)

我在下面有一个粗略的示例,显示了我的大部分代码是如何编写的,以及我尝试以YUIDoc风格记录它.前两部分(FooBazManager)非常简单.对我来说:

  • Foo是一个@class;
  • Baz是一个@class;
  • BazManager是一个@module(或者@class只包含@static成员);
  • Qux也是一个@module但只包含方法.

我的问题是:

  1. 如果BazManager是a @module,则Foo显示在BazManager;
  2. 如果BazManager是a @class,Baz如果你不添加@for所有东西,那么里面的方法会被吸进去;
  3. 如果BazManager是a @class,则记录Baz的可见性变得非常棘手;
  4. 我真的不知道我应该如何记录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)

jua*_*azo 9

在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)

  • 大.谢谢.这或多或少是我最终做的事情(这是我能让事情准确显示的唯一方法).对于任何遇到这个问题的人来说,如果你有一些封闭的类/构造函数的方法来自**一些内部类/构造函数,那么`@ for`也很有用.没有它,这些方法将附加到最后一个内部类.我认为文档在几个地方提到了这一点,但有些人可能没有立即意识到他们的意思. (2认同)