2011-12-14 69 views
19

require.js陈述模块内部定义对象的方式,define([requiremens], object)是最好的方法。要求js遗址代码导航

因此,每个页面或其他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文档说明非常明确,远离全局变量。

+0

这修复了吗? – singsuyash 2017-01-15 16:16:41

回答

8

这是一个known issue,请明星/投票。

从问题描述:

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

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

+3

JetBrains已经在这个问题上实现了基础知识,但是,他们仍然不支持路径配置(你仅限于相对路径),你必须点击定义本身才能访问模块。 :( – 2012-06-19 22:25:48

3

WebStorm(至少6.0.2)与支持,如果你定义你的模块与CommonJs wrapper和使用出口和模块参数RequireJs代码导航:

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

显然,它的工作原理即使如果其他IDE使用

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

同一个JavaScript插件以CrazyCoder说,它可以在其更新的版本以及工作:使用它的模块不使用CommonJS的封装格式。