2014-05-17 1 views
0

저는 AMD 국제화 모듈을 쓰고 있습니다. gettext와 비슷한 방식으로 변환 할 문자열을 수신하고 번역을 반환하는 단일 함수를 내 보냅니다.언어 파일 필요

해당 모듈에서 적절한 번역 파일을로드해야하지만 설정 모듈의 정의와 관련하여 동 기적으로 수행해야합니다.

모듈을 동 기적으로 요구 한 다음 다른 모듈을 동 기적으로 필요로하는 방법은 무엇입니까? 당신이 RequireJS를 사용하고 동 기적으로 실행 나타납니다 코드를 볼 때마다

답변

0

, 즉 단지 모습입니다.

define(function (require, exports, module) { 
    var foo = require("foo"); 
    // ... 
}); 

require("foo") 그냥 동기 호출이라고 생각 : 예를 들어, 당신은 볼 수 있습니다. 어떤 의미에서는 은 즉시 값을 반환하기 때문에 동기입니다. 그러나, 당신이 보이지 않는 것은 것처럼 모듈 정의가 처리한다는 것입니다 :

define(["require", "exports", "module", "foo"], function (require, exports, module) { 
    var foo = require("foo"); 
    // ... 
}); 

모듈 foo은 너무 require("foo") 정말 비동기 아니라, RequireJS는 define에 전달 된 콜백을 실행 비동기 전에로드되었다. 그냥 이런 식으로 보입니다. 이러한 의사 동기 호출이 작동하는 방법의

한 결말은 x 런타임에 계산 된 문자열이 어디 일반적으로 require(x)를 호출 할 수 있다는 것입니다. (당신 x 런타임에 계산 배열이며, 선택적 콜백가 올 수 있습니다 전화 require(x).이는 "일반"비동기 require 있음을 유의하십시오. 아무 문제가 여기에.) 나는 "일반적"고 말했다 때문에 그것이 작동 할 수있는 경우가 있습니다. 당신이 x에 대한 가능한 값의 알려진 작은 세트가있는 경우 예를 들어, 다음과 같이 모듈을 정의 할 수 있습니다 : 내가 사용할 수있는 모든 가능한 모듈을 나열하고 있습니다 때문에

define(["a", "b", "c"], function() { 
    var x = something(); // Where something() can be only return "a", "b", or "c". 
    var module_x = require(x); 
    // ... 
}); 

이 작동 것 define 호출의 종속성에 있고 something()은 이미로드 된 모듈의 이름 만 반환 할 수 있기 때문입니다. 세트가 미리 알려지지 않았거나 모든 가능한 모듈이 모듈화의 목적을 무효로 할 경우,이를 수행 할 수 없습니다. 국제화 모듈의 경우 모든 언어를로드하지 않으려 고하므로이 작업을 수행 할 수 없기를 기대합니다.

요구 사항 자체만으로는 작동하지 않습니다.

당신이 할 수있는 일은 국제화 모듈이 문자열 대신 약속을 반환하도록하는 것입니다. 또는 도움이 될만한 플러그인이있을 수도 있지만 그것에 대해 알지는 못합니다.