3

我在使用 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 没有展示这个闭包的几个功能,上面只是一个最小的例子。“丢失”的功能似乎很随机,有时会丢失一个,有时会连续丢失几个。在大纲中显示的缺失函数之间还有一些函数,如下所示:显示,显示,丢失,显示,丢失,丢失,......
我仔细检查了每个函数都有@memberOfjsDoc 注释,这应该使它在大纲。
缺少的功能不会被编辑器识别为功能块,因此我无法折叠它们(显示的功能可以折叠)。从函数中删除内容会calcGridLocation启用函数的代码折叠detectCollision

4

0 回答 0