2015-09-01 3 views
2

После многих дней неудачных экспериментов с jsDoc, похоже, что у документирования модулей require-js (AMD) есть свои проблемы. Для того, чтобы начать с:Как документировать требуемые модули AMD jsdoc?

Вы не можете пометить свой модуль как класс:

define([ 
    "dcl/dcl", 
], function (dcl) { 
    /** 
    * @class BaseClass 
    * See {@tutorial getting-started} 
    */ 
    var BaseClass = dcl(null,{ 
     foo:function(a){} 
    }); 

    return BaseClass; 
}); 

JSDoc не будет выводить Foo на всех! Только путем изменения его на

/** @module BaseClass */ 
define([ 
    "dcl/dcl", 
], function (dcl) { 
    /** 
    * @class module:BaseClass 
    */ 
    var BaseClass = dcl(null,{ 
     foo:function(a){} 
    }); 

    return BaseClass; 
}); 

будет перечислять функцию foo как функцию в документах. По крайней мере, что-то, но проблема не заканчивается, когда дело доходит до модулей. Если посмотреть на документацию jsdoc (довольно бедно), она рассматривает модули по-разному; особенно когда речь идет о постоянных и перечислениях (канальное состояние):

/** @module BaseClass */ 
define([ 
    "dcl/dcl", 
], function (dcl) { 
    /** 
    * @class module:BaseClass 
    */ 
    var BaseClass = dcl(null,{ 

     /** 
     * 
     * @constant {String} module:BaseClass.COLLAPSED 
     * @static 
     * @member 
     * @name module:BaseClass.COLLAPSED 
     * */ 
     COLLAPSED : '__wcDockerCollapsedPanel', 

     /** 
     * Add a new docked panel to the docker instance.<br> 
     * <b>Note:</b> It is best to use {@link wcDocker.COLLAPSED} after you have added your other docked panels, as it may ensure proper placement. 
     * @param {module:BaseClass.COLLAPSED} [targetPanel] - A target panel to dock relative to, or use {@link wcDocker.BaseClass} to collapse it to the side or bottom. 
     * @returns {wcPanel|Boolean} - The newly created panel object, or false if no panel was created. 
     */ 
     addPanel: function (targetPaneloptions) {} 
    }); 

    return BaseClass; 
}); 

только путем добавления ВЕЗДЕ модуль: префикс, ваши постоянные и перечислений стать канальным состоянием. Это выглядит довольно плохо в документации. Кроме того, я не могу определить константы и перечисления в другом модуле и ссылку на них, memberOf тоже не помогает.

Итак, вопрос в том, как использовать jsDoc с модулями AMD/Require-JS или как я могу заставить jsDoc рассматривать модули AMD (созданные var module = ...) в качестве классов?

ps: возможно ли, что это просто багги или не работает? Потому что я действительно пробовал всевозможные теги и комбинации, но нет ... Ничто действительно не работает, как описано в документах.

Во всяком случае, любая мысль или ссылки на примеры приветствуются. г

ответ

0

Я боролся с этим же вопросом и, наконец, пришли на @lends

Для вас, например, я думаю, что все, что вы должны изменить это

var BaseClass = dcl(null,{ 

в

var BaseClass = dcl(null, /** @lends BaseClass.prototype */{ 

Невключение .prototype приведет к jsdoc, который определяет объектные литералы как static. Я вижу, что вы явно определили COLLAPSED как статический, но не ваш метод, поэтому я не знаю, что вам нужно, или если dcl автоматически определяет константы и функции.

Смежные вопросы