【问题标题】:How can I document a knockout.js view model with jsdoc?如何使用 jsdoc 记录 knockout.js 视图模型?
【发布时间】:2014-04-06 20:22:09
【问题描述】:

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

【问题讨论】:

    标签: javascript knockout.js jsdoc


    【解决方案1】:

    如果您使用@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
        };
    }
    

    【讨论】:

      【解决方案2】:

      当您将变量附加到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
          };
      }
      

      【讨论】:

        猜你喜欢
        • 2016-12-19
        • 2015-04-15
        • 2012-04-27
        • 2012-12-11
        • 2022-06-28
        • 2015-11-27
        • 2012-07-26
        • 2016-01-18
        • 2015-02-05
        相关资源
        最近更新 更多