2012-07-07 5 views
4

는 일반적으로 requirejs 모듈과 같은 기본 deps을 정의합니다.RequireJs는

그래서 같은 :

define('ModuleName', ['jquery'], function($){ 
    $("div.someClass").addClass('hide'); // works 
    var Model = Backbone.Model.extend(); // works too 
}); 

이 가능합니까?

그렇다면 내가 찾는 키워드 또는 방법은 무엇입니까?

답변

2

관심있는 모듈은 외부 범위에 연결해야합니다. 기본적으로 Backbone, Underscore, jQuery 등은 noConflict()를 호출하지 않는 한 전역 범위에 연결되어 있습니다 (모든 모듈이이 점을 제공하지는 않습니다). 전역 범위에 모듈을 연결하는 것은 좋은 해결책은 아니지만 사용자가 요구하는 것을 성취 할 수 있으며 어쨌든 기본 동작입니다. 더 나은 대안은 명명 된 하위 모듈 외에도 종속성을 포함하는 외부 모듈 (또는 단지 require() 호출)을 정의하는 것입니다. 그렇지 않으면 RequireJS 사용에 대한 많은 이유가 없어집니다. 예를 들어

편집 : 동일한 파일에 명명 된 여러 모듈을 정의하는 경우

require(['underscore', 'backbone'], 
    function (_, Backbone) { 
     define('ModuleName', ['jquery'], function($){ 
      $("div.someClass").addClass('hide'); // works 
      var Model = Backbone.Model.extend(); // works too 
     }); 

     //Other modules here, otherwise this is pointless too 
    } 
); 

심지어이에만 유용합니다. 내 생각에 가장 좋은 솔루션은 불행히도 명시 적으로 모듈을 가져 와서 암시 적 모듈 명명을 허용하지만 위 예제는 사용자가 요구하는 것과 가장 가까운 예입니다. the RequireJS api docs에서 암시 모듈 이름에 관해서는 :

명시 적으로 모듈에게 자신의 이름을 수 있지만 적은 휴대용 모듈을 만드는 - 당신이 필요가 이름을 변경하는 것 다른 디렉토리에 파일을 이동합니다.

+0

안녕하세요, 더 나은 대안을 보여줄 수 있습니까? 또는로드 된 모듈은 모든 deps의 객체/배열 만 반환합니까? –

+0

물론, 나는 나의 대답을 편집했다. –