我正在开发一些JavaScript,以便在我正在使用的CMS中使用。
我已经封装了我的代码:
(function(){
var libraryName = {};
...code...
window.libraryName = libraryName;
}())
现在,当我添加一个子名称空间并尝试在声明之外使用它时,NetBeans(8.0.2)自动完成功能不起作用。像这样:
(function(){
var libraryName = {};
libraryName.subSet = {
showSomething: function(){}
};
window.libraryName = libraryName;
}())
libraryName.subSet.showSomething(); // This works
libraryName.subSet. // No current autocomplete even when pressing CTRL+space
我想知道是否有某种方法可以告诉NetBeans如何自动完成而不是猜测。
由于
答案 0 :(得分:3)
您可以使用Ctrl+K
," hippie"代码完成。它直接完成一些匹配结果,如果完成的项目不是你想要的,你可以按住Ctrl + K来获得另一个自动完成的项目(将替换之前插入的项目)。另外,您可以按Ctrl+Space
2次以获得"完整"代码完成(意味着几乎所有来自其他对象/变量的内容)
更新:还有另一种使用JSDoc的方法,但它仅适用于NetBeans的Dev构建,并且将成为下一个8.1版本的一部分(您可以从here下载Dev构建版本):
/**
* @typedef libraryName
* @property {Function} showSomething description
* @property {someProp} foo description
*/
/**
* @typedef someProp
* @property {Date} day description
* @property {Number} num description
*/
/**
* @typedef libraryName.someProp2
* @property {Date} day description
* @property {Number} num description
*/
这样你就必须创建这个"文档"对于您的库并将其放在项目中的JS文件中(可能是库的非缩小JS文件)。有了这个@typedef功能,你几乎可以学习代码完成任务,即使你的代码中甚至没有。)当然还有一些问题尚未解决(它是Dev build)......
答案 1 :(得分:1)
我尝试了另一种适合我的方法。
我复制了我的JavaScript文件并删除了封装。所以我现在有两个文件,"真实"一个与封装和另一个"工作"一个没有封装的人。现在,当我尝试使用自动填充时,它可以正常工作。
这样做的缺点是你会产生噪音,因为有一个文件不适用于网络应用程序,你必须在每次更新原始文件时更新它。但它通过自动完成的魔力使编码更容易。当您加载HTML时,您只是没有引用" working"文件。
所以,这将是我的main.js文件(例如在/js/main.js中)
(function(){
var libraryName = {};
libraryName.subSet = {
showSomething: function(){}
};
window.libraryName = libraryName;
}())
main.tmp.js文件就像这样(例如在/tmp/main.tmp.js中)
var libraryName = {};
libraryName.subSet = {
showSomething: function(){}
};
现在,当我libraryName.subSet.
时,它会显示showSomething
正确的自动填充功能。