2011-12-14 2 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 optimizer가 올바르게 사용할 것이라 확신하지 못한다. Require.js 문서는 전역 변수에서 벗어나기 위해 매우 명확합니다.

+0

수정 되었습니까? – singsuyash

답변

8

known issue입니다. 별표를주세요. 문제 설명에서

가 :

도장 라이브러리 모듈을 로딩하는 대신 dojo.require의 에 대한 AMD의 형식 정의()로 전환(). 이전에 나는 dojo.require ('path.to.someJs')에 Ctrl + B를 사용하여 선언으로 건너 뛸 수있었습니다. 이것은 이 새로운 형식의 define ([ 'path/to/someJs]', ...)에서 작동하지 않습니다.

PyCharm, WebStorm, PhpStorm 및 IntelliJ IDEA가 동일한 JavaScript 플러그인을 공유하므로이 문제는 사용중인 제품에도 적용됩니다. 이 버그가 수정 될 때까지 설명한 문제를 계속 관찰 할 것입니다. 불편을 드려 죄송합니다. ,이 경우에도 작동 분명히

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

:

+3

JetBrains는이 문제에 대한 기본 사항을 구현했지만 경로 구성 (상대 경로로 제한되어 있음)을 여전히 지원하지 않으며 정의 자체를 클릭하여 모듈에 도달해야합니다. : –

+0

이것에 대한 최신 업데이트 – cdeszaq

+0

WebStorm 8에서 개선되었습니다. 기능 * 찾기 용도 * 및 * 선언으로 이동 * [이미 작업 중] (http://stackoverflow.com/a/21954895/623816), 리팩토링은 여전히 ​​약간의 개선이 필요합니다. –

3

WebStorm은 (적어도 6.0.2)를 사용하면 수출 및 모듈 인수를 CommonJs wrapper으로 모듈을 정의하고 사용하는 경우 RequireJs와 코드 탐색을 지원합니다 다른 IDE를 사용하는 경우

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

같은 자바 스크립트 플러그인 CrazyCoder, 그것은뿐만 아니라 자신의 새로운 릴리스에서 작동 할 수 말했듯이 : 그것을 사용하는 모듈은 CommonJs 래퍼 형식을 사용하지 않습니다.

관련 문제