【问题标题】:Autocomplete for a single JavaScript object extended across multiple files in Zend Studio (Eclipse PDT)在 Zend Studio (Eclipse PDT) 中跨多个文件扩展的单个 JavaScript 对象的自动完成
【发布时间】:2011-09-12 01:58:35
【问题描述】:

我的 IDE 是 Zend Studio 8,它为 JavaScript 提供了一个相对基本的透视图(如果不一样的话,类似于 Eclipse PDT 中的透视图)。在我正在处理的应用程序中,我们在多个文件中扩展了一个基础对象,这有效地扼杀了自动完成功能。请参阅下面的示例场景...

// global.js
var App = {
    objectA: {
        method1: function() {},
        method2: function() {}
    },
    objectB: {
        method1: function() {},
        method2: function() {}
    }
};

// extend.js
App.Extend = {
    anotherMethod: function() {}
};

在这种情况下,键入 App. 会导致自动完成显示为 objectAobjectB,但不是 Extend。如果我将 Extend 添加到 global.js 中的 App 变量,它将出现在自动完成中,但不会出现在另一个方法中。如果我使用var Extend = { /* code */ };,自动完成功能将适用于Extend 对象,因此问题似乎与代码跨多个文件扩展这一事实无关。可能是因为单个对象分布在多个文件中……或其他原因。

有人有什么想法吗?

【问题讨论】:

  • 只是出于好奇 - 如果是 App.extend 而不是 App.Extend 会发生什么?
  • 起初我认为这可能会在自动完成下更好地归档,但后来我觉得更好并恢复了。很抱歉进行了修改。
  • @minikomi 感谢您的回复。本案不影响结果。可能是 App.extend、App.EXTEND、App.Extend 等等,都不起作用。我也尝试了不同的术语,只是为了测试结果。

标签: php javascript eclipse zend-studio eclipse-pdt


【解决方案1】:

不熟悉 Zend Studio,但从你所说的不清楚它是否仅适用于全局。 IE。如果我理解正确,这有效:

// global.js
var App = {
    objectA: {
        method1: function() {},
        method2: function() {}
    },
    objectB: {
        method1: function() {},
        method2: function() {}
    }
};

// extend.js
var Extend = {
    anotherMethod: function() {}
};

但是,如果你添加这个,这会起作用吗?

// extend.js
...
var More = {
    streetWithNoName: false,
};
More.helloWorld = [1, 2, 3]

如果您无法在More. 上获得helloWorld 的自动完成功能(并且因为它适用于Extend,您应该获得streetWithNoName 的自动完成功能),那么可能 Zend 没有做一个非全局完成,我想无论如何这都是一件非常困难的事情。如果可以,那么您总是可以这样做:

var innerAppExtend = App.Extend = { ... };

作为一种解决方法,如果你当然可以接受的话。

【讨论】:

  • 谢谢你的尝试,但这正是我试图避免的。这样做的目的是确保将这些方法封装在 App 对象中,而无需创建全局变量。
  • 我还测试了 More.helloWorld(包括数组和对象类型),并且自动完成工作正常。 streetWithNoName 和 helloWorld 都出现在自动完成中。另一个线索!
  • 鉴于您所说的,您可以尝试在extend.js 的开头添加var App;var App = App;(并按照您的原始帖子中的所有操作)吗?
  • 它会跨文件自动完成吗?例如。如果在一个文件中你有var A = { a: function() {} },然后在下一个文件中(按包含顺序)var B = { b: A },你能自动完成B.b.并得到a吗?如果这在一个文件中有效,但在分成两个文件时无效,那么我猜 Zend Studio 中没有跨文件自动完成。
  • 当a / b处于同一文件时,它按预期工作。当在两个单独的文件中时,自动完成仍然适用于 A,但它不会延续到 B.b
【解决方案2】:

由于 Javascript 不是一种编译语言,IDE 不知道您的扩展类在哪里。一些高级 IDE 尝试通过将每个 javascript 文件视为单个项目的一部分来解决此问题,从而在后台将它们组合起来以提供自动完成功能。

我使用过各种 IDE,我见过它工作的唯一 IDE 是 Jetbrain's Webstorm

【讨论】:

    【解决方案3】:

    VJET JS IDE for Eclipse 有一种使用 vjetdoc 语法跨多个文件扩展的方法。看看——http://www.ebayopensource.org/wiki/display/VJET/JS+code+assist+and+validation+for+two+or+more+js+files

    它适用于对象字面量、变量、函数。一旦您进入类概念,通常就会有一个包装函数来定义类。在 VJET 中有 vjo.ctype 允许您在 js 中创建类。 VJET 为使用这种类型的构造工具包定义的类提供了正确的帮助。这是一个例子:

    Base.js
    vjo.ctype("namespace.Base")
    .endType();
    
    App.js
    vjo.ctype("namespace.App")
    .inherits("namespace.Base")
    .protos({
       doIt:function(){}
    })
    .endType()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-03
      • 2011-02-12
      • 1970-01-01
      • 2010-11-09
      • 2010-12-22
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      相关资源
      最近更新 更多