php - Autocompletar para un solo objeto de JavaScript extendido en mĂșltiples archivos en Zend Studio(Eclipse PDT)
zend-studio eclipse-pdt (3)
Mi IDE es Zend Studio 8, que presenta una perspectiva relativamente básica para JavaScript (similar a, si no la misma, la perspectiva en Eclipse PDT). En la aplicación en la que estoy trabajando, extendemos un objeto base a varios archivos, lo que ha eliminado la funcionalidad de autocompletar. Vea a continuación un ejemplo de escenario ...
// global.js
var App = {
objectA: {
method1: function() {},
method2: function() {}
},
objectB: {
method1: function() {},
method2: function() {}
}
};
// extend.js
App.Extend = {
anotherMethod: function() {}
};
En este escenario, escribiendo App.
hace que el autocompletar aparezca con objectA
y objectB
, pero no Extend
. Si agrego Extender a la variable de la aplicación en global.js, aparecerá en el autocompletado, pero no con otro Método. Si tuviera que usar var Extend = { /* code */ };
, autocompletar funcionaría para el objeto Extend
, por lo que el problema no parece estar relacionado con el hecho de que el código se extiende a varios archivos. Quizás sea porque un solo objeto se está extendiendo a través de múltiples archivos ... o algo más.
¿Alguien tiene alguna idea?
Dado que Javascript no es un lenguaje compilado, el IDE no tiene idea de dónde están las clases extendidas. Algunos IDE avanzados intentan solucionar esto considerando que cada archivo javascript es parte de un solo proyecto y, por lo tanto, los combina en segundo plano para darle autocompletar.
He jugado con una variedad de IDE y el único IDE con el que lo he visto es Webstorm de Jetbrain
No estoy familiarizado con Zend Studio, pero por lo que dice, no está claro si funciona solo en los globales o no. Es decir, si te entendí correctamente, esto funciona:
// global.js
var App = {
objectA: {
method1: function() {},
method2: function() {}
},
objectB: {
method1: function() {},
method2: function() {}
}
};
// extend.js
var Extend = {
anotherMethod: function() {}
};
Sin embargo, si agrega esto, funcionará esto?
// extend.js
...
var More = {
streetWithNoName: false,
};
More.helloWorld = [1, 2, 3]
Si no puede completar automáticamente para helloWorld
en More.
(y como funciona en Extend
, deberías obtener el autocompletado para streetWithNoName
), entonces probablemente Zend no esté realizando una finalización no global, lo que creo que es algo muy difícil de hacer de todos modos. Si puede, entonces siempre puedes hacer:
var innerAppExtend = App.Extend = { ... };
como una solución, si eso es aceptable para usted, por supuesto.
VJET JS IDE para Eclipse tiene una forma de extenderse a través de múltiples archivos usando una sintaxis vjetdoc. Compruébelo: http://www.ebayopensource.org/wiki/display/VJET/JS+code+assist+and+validation+for+two+or+more+js+files
Funciona con objeto literal, variables, funciones. Tan pronto como se accede a los conceptos de clase, normalmente hay una función de envoltura para definir las clases. En VJET hay vjo.ctype que te permite crear clases en js. VJET proporciona asistencia correcta para las clases definidas con este tipo de kit de construcción. Aquí hay un ejemplo:
Base.js
vjo.ctype("namespace.Base")
.endType();
App.js
vjo.ctype("namespace.App")
.inherits("namespace.Base")
.protos({
doIt:function(){}
})
.endType()