需要js废墟代码导航

时间:2011-12-14 10:07:36

标签: javascript intellij-idea requirejs pycharm js-amd

require.js说明了使用define([requiremens], object)作为最佳方式在模块内定义对象的方法。

因此,每个页面或其他js文件都会require()调用并接收模块作为参数。

这很好用,每个函数/模块都有自己的命名空间。

问题是我有:

// AJAX/Requests.js

define(['UI/Message'],function(Message){
var Requests={
    checkResponse:function(response){
        //1==ok
        //0==error
        //2==good message
        //3==good message, but still stop
        if(response.status==1){
            return true;
        }
        else if(response.status==2){
            Message.good(response.message);
            return true;
        }
        else if(response.status==3){
            Message.good(response.message);
            return false;
        }
        else{
            Message.bad(response.message);
            return false;
        }
    }
};
return Requests;
});

现在UI /消息以相同的方式定义,并返回对象。

但是当我用请求编辑文件时,我无法通过代码导航,所以如果我想编辑Message对象,唯一的方法就是自己打开文件并找到我需要的函数,而不是IDE跳到我那里。

pycharm是否有一些解决方法或者需要共同的require.js来解决这个问题?当你有很多代码时,导航它就变得一团糟,这就是我首先使用IDE的原因!

更糟糕的是:编辑永远不知道对象有什么功能!

我可以看到的一个可能的解决方案是不使用封闭的命名空间,并在define()调用之前声明全局变量,但在这种情况下,所有对象都应该像UI_Message,AJAX_Requests一样被调用。为了确定,我在两个不同的位置没有消息....

我不确定,如果require.js优化器将正确使用它。 Require.js文档非常清楚,远离全局变量。

2 个答案:

答案 0 :(得分:8)

这是known issue,请注明/投票。

来自问题说明:

  

dojo库切换到AMD的格式define()以加载模块   而不是dojo.require()。以前我可以使用Ctrl + B   dojo.require('path.to.someJs')跳转到声明。这样做   不适用于新的格式定义(['path / to / someJs]',...)。

由于PyCharm,WebStorm,PhpStorm和IntelliJ IDEA共享相同的JavaScript插件,此问题也适用于您正在使用的产品。在修复此错误之前,您将继续观察所描述的问题。很抱歉给您带来不便。

答案 1 :(得分:3)

如果您使用CommonJs wrapper定义模块并使用 exports 和模块参数,WebStorm(至少6.0.2)支持使用RequireJs进行代码导航:

//foo.js
define(function(require, exports, module) {
    //use exports to expose properties for code navigation in other modules
    exports.bar = function() {}
});

显然,即使使用它的模块不使用CommonJs包装器格式,它仍然有效:

define(['./foo'], function(foo) {
    foo.bar(); //code navigation works here
}

如果其他IDE使用与CrazyCoder相同的JavaScript插件,它也可能适用于他们的新版本。