我该如何用jsdoc记录淘汰表视图模型?

use*_*607 5 javascript jsdoc knockout.js

我已经尝试过使用命名空间和@memberOf标记,但是在生成的API文档中,我仍然没有任何类成员或方法。

这是一些示例代码:

/**
 * Test file
 * @namespace test
 */

/**
 * my view model
 * @class MyViewModel
 * @memberOf test
 */
function MyViewModel() {
    var self = this;

    /**
     * test observable
     * @type {Object}
     * @memberOf test.MyViewModel#
     */
    self.testObservable = ko.observable();

    /**
     * test function
     * @memberOf test.MyViewModel#
     */
    self.testObservable = function() {
        // do something
    };
}
Run Code Online (Sandbox Code Playgroud)

cwo*_*man 1

当您将变量附加到 .jsdoc 时,jsdoc 似乎会感到困惑self。JSDoc 实际上解析您的代码以查找变量名称似乎无法处理您在类上定义属性的方式。(尽管这是定义它们的一种非常常见的方式)。

我通过 jsdoc 运行了这段代码,它记录得很好:

/**
 * Test file
 * @namespace test
 */

/**
 * my view model
 * @class MyViewModel
 * @memberOf test
 */
function MyViewModel() {
    var self = this;

    /**
     * test observable
     * @type {Object}
     * @memberOf test.MyViewModel#
     */
    var testObservable = ko.observable();
}
Run Code Online (Sandbox Code Playgroud)

你可以像这样工作:

/**
 * Test file
 * @namespace test
 */

/**
 * my view model
 * @class MyViewModel
 * @memberOf test
 */
function MyViewModel() {
    var self = this;

    /**
     * test observable
     * @type {Object}
     * @memberOf test.MyViewModel#
     */
    var testObservable = self.testObservable = ko.observable();
}
Run Code Online (Sandbox Code Playgroud)

不过,这似乎是一种非常烦人的方式:(

我的建议

使用yuidoc,它根本不解析您的 JavaScript,而是取决于您明确描述每个属性。以下是我如何使用 yuidoc 记录您的代码:

/**
 * Test file
 * @namespace test
 */

/**
 * my view model
 * @class MyViewModel
 * @memberOf test
 */
function MyViewModel() {
    var self = this;

    /**
     * test observable
     * @property testObservable
     * @type {Object}
     */
    self.testObservable = ko.observable();

    /**
     * test function
     * @property testObservable
     */
    self.testObservable = function() {
        // do something
    };
}
Run Code Online (Sandbox Code Playgroud)