2012-05-29 5 views
1

requirejs을 사용하고 외부 공급 업체 j를로드하고 백본 또는 언더 코어와 같은 전역 변수를 숨기려고합니다. 여기에 내 질문의Require.js 뭔가 명확하지 않습니다.

<script data-main="./main" src="<?php echo $rootRequirejs?>/require.js"></script> 
<script type="text/javascript"> 
    require.config({ 
     baseUrl: "/web/js", 
     paths: { 
      "jquery": "/vendor/js/jquery-1.7.1.min", 
      'underscore': '/vendor/js/underscore-min', 
      'backbone': '/vendor/js/backbone-min' 
     } 
    }); 

:

여기 내 코드의 I는 자바 스크립트 콘솔에 가서 내가 백본을 쓰거나가 정의 밑줄 경우

1) 을 ....
콘솔에서 액세스 할 수 없지만 내 main.js 파일에서 액세스 할 수 있어야한다고 생각합니다.
왜 글로벌입니까?

+0

글로벌에 대해서는'noConflict()'메소드를 사용할 때까지 여전히 전역입니다. IIRC, require.js는 이러한 의존성에 대한 함수를 정의 할 수있게하므로'Backbone.noConflict()'와 같은 것을 반환 할 수 있습니다. –

+0

Btw, [Require.js 2.0] (http://tagneto.blogspot.fr/2012/05/requirejs-20-released-onward-amd.html)을 보셨습니까? 그것은 당신의 문제를 해결합니다. 또한 "upgrading require.js"가이드를 살펴보면 많은 유용한 정보를 볼 수 있습니다. –

+0

어떻게 모달을로드합니까? main.js를 게시하여 종속성을 선언하는 방법을 확인할 수 있습니까? –

답변

0

당신은 전역 변수의 사용을 피해야한다 그, AMD 모듈에 싸여있는 그 라이브러리의 AMD 버전을 사용할 수 있습니다

https://github.com/amdjs/backbone

https://github.com/amdjs/underscore

그들은 제임스 버크가 유지 관리를의 RequireJS의 저자.

호프가 문제를 해결할 수 있기를 바랍니다.

1

이들은 기본적으로 라이브러리 자체 (백본 등) 작성 방법으로 인해 전역 적입니다. 전역 공간 (b/c 음, js 작동 방식)을 명시 적으로 사용합니다. 이 libs 중 the AMD-forks을 사용해 보셨습니까?

위의 설명에서 Florian이 지적한대로 더 나은 옵션은 Require2.0을 사용하는 것입니다. "shim" feature과 함께 제공되므로 AMD가 아닌 라이브러리에서도 사용할 수 있습니다. 전역.

fwiw, 전역을 피할 특별한 이유가 없으면 대개 큰 거래가 아닙니다.

+0

심 기능을 사용하려고하는데 모듈이 이미 정의되어 있음을 requirejs에 알릴 수 있습니까? 그렇다면 어떻게? eaxmple shim : { 'jquery'} baseUrl에서 보이지만 실제로 이미 loaaded입니다. – js999

+0

require는 이미로드 한 모듈을로드하려고 시도하지 않습니다. require를 사용하여 jquery를로드한다면 괜찮을 것입니다. require 및 표준 스크립트 태그를 통해 jquery를로드하는 경우 페이지에 두 개의 복사본이 생성 될 수 있습니다. 나는 * 생각한다. * jquery를 먼저로드하면, 이미로드되었다는 것을 볼 수 있고 (모듈로 기술적으로 정의되어있다.), 다시로드하려고 시도하지 않는다. – busticated