我在使用 JSDT 1.4.1 在 Eclipse 4.2 中概述 JavaScript 文件时遇到了一个奇怪的问题。我有一个这样定义的闭包:
var myClosure = (function() {
var calcGridLocation,
detectCollision;
/**
* Calculate the grid cell coordinates from the offset of an element and the editorgrid offset
*
* @param {jQuery object} obj jQuery object of the object whose location will be calculated
* @param {String} [subgrid=""] Specify the currently active subgrid
* @returns {Object} Coordinate object with x, y and obj properties, obj hols a jQuery object of the target cell, null for locations outside the editorgrid
* @memberOf myClosure
*/
calcGridLocation = function(obj, subgrid) {
var gridOffset, // Offset (relative to document) of the editorgrid
objOffset, // Offset (relative to document) of the provided object
rv = {}; // Return value object
if(subgrid === null || subgrid === undefined) {
subgrid = "";
// Get the grid's offset
gridOffset = $("#editorgrid").offset();
}
else {
// Get the grid's offset
gridOffset = $("#" + subgrid).offset();
subgrid += "_";
}
// Get the object's offset
objOffset = obj.offset();
// Calculate the grid coordinates of the object
if(objOffset === undefined || gridOffset === undefined) {
debugger;
}
rv.x = Math.floor((objOffset.left - gridOffset.left) / cellSize);
rv.y = Math.floor((objOffset.top - gridOffset.top) / cellSize);
// Check if the location is a valid grid location
if(rv.x >= 0 && rv.x < tblCellCount && rv.y >= 0 && rv.y < tblRowCount) {
if(obj.hasClass("gridCell")) {
rv.obj = obj;
}
else {
// Get the grid cell object and return the return value object
rv.obj = $("#" + subgrid + "c_" + rv.y + "_" + rv.x);
}
return rv;
}
else {
// Return null, no valid grid location
return null;
}
}; //calcGridLocation = function()
/**
* Detect a collision of an object with other dragboxes
*
* @param {jQuery object} obj Object to check for collisions
* @returns {Object} Object with collision, obstacle, shift.x and shift.y attributes
* @memberOf myClosure
*/
detectCollision = function(obj) {
// Some code here
}; //detectCollision = function()
})();
经过一番研究,我发现我需要 jsDoc 注释才能使函数显示在 Eclipse 中。第一个功能出现,但第二个没有。它只是没有列出。
真正奇怪的是:如果我完全删除第一个函数的内容,第二个函数就会正常显示。我的语法中是否有一些错误会导致这种行为?当我在浏览器(谷歌浏览器)中测试我的项目并通过 jsLint 验证时,完整的脚本工作正常(除了一些我不接受 jsLint 编写代码的方式)。
附加信息
Eclipse 没有展示这个闭包的几个功能,上面只是一个最小的例子。“丢失”的功能似乎很随机,有时会丢失一个,有时会连续丢失几个。在大纲中显示的缺失函数之间还有一些函数,如下所示:显示,显示,丢失,显示,丢失,丢失,......
我仔细检查了每个函数都有@memberOf
jsDoc 注释,这应该使它在大纲。
缺少的功能不会被编辑器识别为功能块,因此我无法折叠它们(显示的功能可以折叠)。从函数中删除内容会calcGridLocation
启用函数的代码折叠detectCollision
。