Благодаря ответу, найденному здесь:
Моя документация JavaScript хорошо организована и хорошо отформатирована. Каждое пространство имен является "родителем" методов, содержащихся внутри. Тем не менее, навигация не такая гранулированная, как хотелось бы.
После компиляции/рендеринга с помощью инструмента node.js с помощью простой команды (jsdoc file1.js file2.js
) документы будут сгенерированы в шаблон по умолчанию. Этот шаблон по умолчанию отображает мои пространства имен в навигации на боковой панели, но не отображает методы, которые каждый содержит.
Вы можете подделать список методов, добавив директиву @class
к каждому методу, но, как мы знаем, они не являются действительно классами.
Мне бы очень хотелось увидеть навигацию на боковой панели:
My Project
- namespace 1
- method.a
- method.b
- method.c
-namespace 2
- method.d
- method.e
Любое направление документации, которую я упустил, будет с благодарностью.
[edit to add:]
При экспериментировании @class
выполняет почти то, что я хочу, но за некоторыми исключениями:
-
В нем перечислены классы над пространствами имен. Мне это не нравится, поскольку пространства имен являются "родителями" как есть.
-
В этом смысле JavaScript не имеет классов. Не те, которые называются "классами" с этой номенклатурой. Это создает странное отключение при чтении документа, чтобы увидеть список "классов".
-
Автоматически добавляет "новый" оператор. Не все методы имеют конструкторы... вы можете увидеть проблему!
[править: пример кода]
Итак, вот текущая структура. Прежде чем комментировать его с помощью комментариев JSDoc, вот базовый подход:
var app = app || {};
app.utils = {
whizbang: function() {},
geegolly: function() {}
};
app.render = {
thestuff: function(params) {},
thethings: function(params) {}
}
}
Таким образом, используя нотацию объектного литерала, верхний уровень является "пространством имен" для всего приложения, но внутри него есть пространства имен под разными именами. Здесь у меня есть суб-пространство имен, специфичное для утилит, а другое - для рендеринга. Каждый из них может иметь свойства, но, что более важно, каждый из них содержит функции. Именно эти функции должны появляться на боковой панели. Теперь, чтобы скомпоновать его с моей текущей моделью для JSDoc:
/**
* @file MyApp.js This is an awesome description of MyApp.js
*
* @version 0.1
* @author Greg Pettit
* @copyright 2015
*
*/
/**
* Description of my main namespace!
*
* @namespace app
*/
var app = app || {};
/**
* This is a description of my sweet utilities namespace!
*
* @memberof app
* @type {object}
* @namespace app.utils
*/
app.utils = {
/**
* app.utils.whizbang is an awesome function with magical powers. I sure wish
* it would appear in the sidebar as a member of app.utils!
*
* @memberof app.utils
* @method whizbang
*
* @param {method} [successCallback] Method invoked on successful attempt.
* @param {method} [errorCallback] Method invoked on unsuccessful attempt.
*
*/
whizbang: function(successCallback, errorCallback) { // do utility stuff! }
}
/**
* This is a description of the best rendering namespace ever.
*
* @memberof app
* @type {object}
* @namespace app.render
*/
app.render = {
/**
* app.render.thethings renders the things! I wish it would render to the sidebar...
*
* @memberof app.render
* @method thethings
*
* @param {method} node The node to which thethings are rendered
*
*/
thethings: function(node) { // do rendering stuff! }
}