2013-03-26 3 views
0
나는 이런 식으로 뭔가로 require() 기능을 사용할 수 없습니다 왜 궁금하네요

:사용자 정의 사용이 필요() 함수

두 번째 require() 호출 던졌습니다
// I'm using define's sugar syntax 
define(function(require) { 

    // This works fine. It assigns myModule to the myModule variable (no callback needed) 
    var myModule = require('myModule'); 

    var getModule = function(name) { 

    // This doesn work. Using require() here expects a callback 
    return require(name);   
    }; 

    return getModule; 
}); 

(그러나 DevTools로 함께 살펴 본다하는 것을 보여줍니다 <name> 실제로)로드 :

Uncaught Error: Module name <name> has not been loaded yet for context: _ 

왜 처음 require() 호출 그냥 모듈 (이 콜백 방식으로 할 필요 없음)을 반환하지만 두 번째 require() 전화는 콜백 작동합니까?

+0

확실? 그것은 꽤 철저합니다. –

+0

@SimonSmith docs는 왜 내 함수의 범위 내에서 콜백과 함께 require()를 사용해야하는지 설명하지 않습니다. 바깥 쪽에서 나는 var dep = require ('dep')가 될 수있다. – jviotti

+0

@jviotti 나는 이것이 늦은 대답이라는 것을 알고있다. 그러나 @Simon Smith가 그의 대답에서 지적했듯이 그것이 작동하지 않는 이유는 단순히 정상적인 코드처럼 실행됩니다. Requirejs는 실제로'require'에 대한 호출을 위해 함수를 구문 분석하여 의존성 트리를 만들 수 있습니다. 그렇게하기 위해서는 주어진 모듈의 모든 의존성을 먼저 알아야합니다. 실제로 모든 것을 가져 오기 전에 모든 종속성을 알아야하기 때문에이를 동적으로 수행 할 수 없습니다. – Davy8

답변

1

여기에서 내 의견을 따르겠다.

당신은 require이 그것에 통과 한 정의 콜백이 아닌 장소에서 첫 번째 인수로 배열을 통과하지 않고 require을 사용할 수 없습니다. 그리고 그것조차 한계가 있습니다.

require('jquery', function() {}); 

http://requirejs.org/docs/errors.html#requireargs

당신이 그것을 할 수있는 유일한 시간은 여기에 있습니다 : :

define(function(require) { 
    var $ = require('jquery'); 
}); 

이 단지 더 좋은 방법 인 오류가 발생합니다 다른 사람이 어느 곳을하려고

의 글 :

define(['jquery'], function($) { 

}); 

첫 번째 버전은 설탕 구문으로 알려져있다 - 나는 기본적으로 그냥 조금 더 명확하게 그 희망 RequireJS의 문서에 설명하지만, 무엇 반복 한 http://requirejs.org/docs/whyamd.html#sugar

The AMD loader will parse out the require('') calls by using Function.prototype.toString(), then internally convert the above define call

.

는 또한 여기에 다른 문맥에서이 주제를 커버 - How to achieve lazy loading with RequireJS? 워드 프로세서 페이지 설명에 실패한 것을

+0

그래, 알아. 제 질문은 잘 쓰여지지 않았다고 생각합니다. 미안 해요. 지금 고치려고 최선을 다했습니다. 이것을 봐주세요 – jviotti