如何使用jsdoc记录knockout.js视图模型?

时间:2014-04-03 12:01:42

标签: javascript knockout.js jsdoc

我已经尝试使用命名空间和@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
    };
}

2 个答案:

答案 0 :(得分:2)

如果您使用@memberof,那么@memberof!代码就会有用。感叹号迫使jsdoc遵循你给它的东西。如果您不使用感叹号,jsdoc将决定它比您更了解并忽略该标记。但使用@memberof!仍然使它看起来很时髦。您可以执行的操作是删除@memberof代码并使用@lends,如下所示:

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

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

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

    /**
     * test function
     */
    self.testObservable = function() {
        // do something
    };
}

答案 1 :(得分:1)

将变量附加到self时,

jsdoc似乎感到困惑。 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();
}

你可以这样做:

/**
 * 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();
}

尽管如此,这似乎是一种非常令人讨厌的方式:(

我的建议

使用 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
    };
}