2013-02-07 2 views
1

JS 애플리케이션을 해체하기 위해 RequireJS/AMD를 사용하고 있습니다. 내 모듈 중 하나는 "비동기 적으로"요청을 한 다음 반환 된 데이터를 저장하는 것 외에는 아무것도 수행하지 않는 "환경"모듈입니다. 이 환경 모듈은 실질적으로 다른 모든 모듈에 대한 의존성입니다.RequireJS/AMD 및 전역 적으로 사용 가능한 값

제 문제는이 환경 정보를 즉시 사용할 수 있어야한다는 것입니다. 내 비동기 요청이 완료되고 환경 변수가 반환되기 전에 변수가 올바르게 설정되었는지 확인할 수있는 방법이 있습니까?

environment.js 초기화 순서가 종종 설계 결함이 있다는 것을 의미에 대해 걱정할 필요

define(["./opui"], function(opui){ 

    var environment = { 
      jsonpath: null, 
      imgpath: null, 
      platform: null 
    }; 

    //request environment data asynchronously 
    getEnvironment(); 

    //callback that sets environment data 
    setEnvironment(); 

    return environment; 

}) 

답변

1

; 그게 바로 RequireJS가있는 이유입니다.

사용이 environment 데이터를 필요로 모든 모듈에 text plugin † :

define(['dep1', 'dep2', 'text!./environment'], 
    function (dep1, dep2, environmentJsonString) { 
    var environment = JSON.parse(environmentJsonString); 
    dep1.foo(environment.platform); 
}); 

./environment는 JSON으로 데이터를 반환하는 서버 측 호출의 URL입니다, 예 :

{ "jsonpath": "...", 
    "imgpath": "...", 
    "platform": "..." } 

이렇게하면 응용 프로그램 시작 도중 데이터를 검색하여 종속성을 유지하므로에 대한 비동기식 AJAX 호출이 반환 될 때까지 기다리지 않아도됩니다.

모든 모듈은 동일한 변경 가능한 인스턴스를 공유합니다. 또한 r.js의 빌드 구성에 inlineText: false을 설정하여 최적화 프로세스 중에 JSON 문자열을 인라인하지 않도록하십시오.

텍스트 -> JSON 구문 분석을 처리하는 JSON 플러그인이 있지만 어떤 이유로 그것이 작동하지 않습니다.

관련 문제