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()
})();
いくつかの調査の後、関数をEclipseに表示するにはjsDocアノテーションが必要であることがわかりました。最初の関数は表示されますが、2 番目の関数は表示されません。リストされていないだけです。
そして、本当に奇妙なこと: 最初の関数の内容を完全に削除すると、2 番目の関数が正常に表示されます。この動作を引き起こす構文に間違いがありますか? ブラウザー (Google Chrome) でプロジェクトをテストし、jsLint によって検証されると、完全なスクリプトは正常に動作します (jsLint によるコードの記述方法を受け入れない場合を除きます)。
追加情報
Eclipse はこのクロージャーのいくつかの機能を示していません。上記は最小限の例です。「失われた」関数は非常にランダムであるように見えます.1つが欠落している場合もあれば、連続していくつか欠落している場合もあります。また、次のようにアウトラインに示されている欠落している関数の間には関数があり
ます@memberOf
。概要。
欠落している関数はエディターによって関数ブロックとして認識されないため、折りたたむことができません (表示されている関数は折りたたむことができます)。関数からコンテンツを削除すると、calcGridLocation
関数でコードを折りたたむことができますdetectCollision
。