当使用揭示模块模式时,我该如何在eclipse中查看大纲?

17

我目前正在重构一些JavaScript代码,其中我改变了它以利用揭示模块模式。 代码看起来更整洁并且可以运行良好,但我无法在大纲视图中看到函数。 我看到顶级命名空间var作为一个var,但您无法展开它以查看其中的函数。

假设代码以前是这样的:

function myFunc1() {}
function myFunc2() {}

在这种情况下,您可以在大纲视图中看到这两个函数。但是如果您将其更改为:

var myNamespace = function()
{
  function myFunc1() {}
  function myFunc2() {}

  return {
    name: "myNamespace",
    myFunc1: myFunc1,
    myFunc2: myFunc2
  }
}();

然后轮廓视图只显示了 myNamespace 变量。我尝试过查找,但找不到一个能够正确显示层次结构的视图。有人知道如何查看吗?还是说这是Eclipse无法做到的情况?


Francois的答案非常有效。虽然依赖于注释有点笨拙,但这是我见过的唯一解决方案。我注意到,如果您输入了错误的@memberof,则Eclipse大纲会与注释一起显示,而不是代码,因此在使用时需要小心。 - Ben Thurley
4个回答

23

1
非常感谢。两个月后,没有其他人提出建议,所以显然这是一个棘手的问题要解决。 - Ben Thurley
4
这就是我长久以来一直在寻找的 :) - Chameleon
1
在我的PHP Neon中似乎完全没有效果...还有其他需要知道的吗?需要启用什么吗? - BurninLeo
@BurninLeo:请参考这个问题。这是Neon中的一个bug,由于JSDT的核心元素被重写或切换到更易维护的软件组件。部分功能已经恢复得相当快,这很值得一提,但仍有有效的JS结构不能产生令人满意的大纲。 - AbVog
最终,我已经安装了NetBeans来编辑我的(Eclipse)项目中的JS文件。非常不错 :) - BurninLeo

5

一种方法是按照以下方式进行调用。 将其定义为它本身,但不要自我执行。 确保原型是一个空对象,然后尝试调用它。 它的工作方式相同,但会恢复大纲,并且您不需要在每个函数前面添加注释。

var myNamespace = (function()
{
  function myFunc1() {}
  function myFunc2() {}

  return {
    name: "myNamespace",
    myFunc1: myFunc1,
    myFunc2: myFunc2
  }
});
myNamespace.prototype = {};
myNamespace();

这是一个公平的答案,只是来得有点晚了。但对于一个新手同胞来说值得点赞。 - Ben Thurley

2
在大纲中不显示myFunc1()等似乎是一个错误,在3.2版本中已经被标记为已修复。但是在4.2版本中仍未修复。当处理数百个函数的大型文件时,只有变量名出现在大纲中肯定会非常麻烦。我祈祷它能得到修复。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=236202

https://bugs.eclipse.org/bugs/show_bug.cgi?id=281374#c1

「myNamespace」的成员之一。 加在「myFunc1()」上方时,即使关闭并重新打开文件,它也不会在大纲中显示。有趣的是,我的20个左右的函数中有4个会显示在大纲中,但是工作和不工作的函数之间没有区别,除了那些工作的函数都有「this.xxx」(但是如果我为不可见的函数添加「this.dummy;」也没有帮助)。这个半成品可以使用:「myNameSpace.prototype = {}; myNameSpace;」,但是你不能像这样调用它的函数:「myNameSpace.myFunc1();」。

1
是的,在Eclipse 5.X或者Kepler中,这两种方法都对我不起作用。JSDoc可以生成漂亮的HTML页面来概述自调用对象/命名空间,而Eclipse可以在你按下ctrl + space时提供建议/自动完成,但它拒绝概述对象!:( - Eric L.

0

我正在使用eclipse/Kepler进行编程。根据上面的建议,我成功地获得了大纲视图。但是建议(Ctrl-space)没有起作用。有些函数是可见的,有些则不是。无法检测出任何模式。

阅读了http://usejsdoc.org/#JSDoc3_Tag_Dictionary之后,我将所有的@memberOf替换为@memberof,现在一切都按预期工作了(直到下一个问题出现...)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接