2012-08-28 2 views
1

우리는 require.js를 사용하는 앱을 보유하고 있으며 동시에 확장을 허용하고 이러한 확장자 'j는 다른 경로에서 제공됩니다. 그래서 우리의 설정에서 우리는이 :혼합 기본 URL에서 require.js 모듈을 동적으로로드하십시오.

var require = { 
    baseUrl : '/app/js/modules/' 
} 

그러나 확장 /extension/foo-extension/js/modules/에서 제공됩니다. 또한 확장 기능은 해당 모듈을로드하기 위해 픽업 한 을 사용하는 페이지에 일부 html을 삽입하는 지점까지 동적입니다.

이상적으로 우리는/통과 base을 /extension/foo-extension/js/modules/ 이내에 다음 모듈 부하 범위 require.js에 대한 컨텍스트를 설정할 수있을 것. 내가 말할 수있는 한 require('/extension/foo-extension/js/modules/foo/bar')을 수행하여 foo-extension에서 foo/bar을로드해야합니다.

define(['some-dep'], function(SomeDep) { 
    $.get('somepage', function(html) { 
     var extension = html.data('extension'); // "foo/bar" 
     var extensionBase = html.data('extensionBase'); // extension/foo-extension/js/modules/ 

     // This is where we need to readjust require to use the base path for any foo module 
    }); 
}); 

절대 경로 길을가는이 부분에 다른 해결책이 있습니까 : 여기

우리가 경로/컨텍스트를 설정 처리하기 위해 필요로하는 곳에 상상하는 일부 의사 코드?

답변

2

"paths" configuration option을 사용하려는 것 같습니다. 예 :

var require = { 
    baseUrl : '/app/js/modules', 
    paths : { 
    'extension' : '/extension/foo-extension/js/modules' 
    } 
}; 

그런 다음 당신은 단순히() /app/js/modules/extension/foo-extension/js/modules/foo/bar.js

+0

여기에 * 동적 * 비트가 있습니다. 내 구성이 설정된 후에 이런 일이 발생하기 때문에 경로를 사용할 수 없습니다. 여하튼 경로가 보간 되었다면'/ extension/{extension}/js/modules /'를 사용할 수 있습니다. – Nervetattoo

+0

"이상적으로 우리는 require.js에 대한 컨텍스트를 전달/설정하여 다음 모듈로드가 baseUrl 내에 포함되도록 할 수 있습니다."이것은 정확하게 경로 옵션에서 수행하는 작업입니다. 동적 인 서버 측 솔루션이 필요한 경우, 서버 측에서 발생한 일에 대한 설명을 게시 할 것을 제안 할 수 있습니까? – Russ

+0

미리 정의 된 경로를 설정하는 것입니다. 나중에 ajax 요청을 통해로드 된 마크 업의 데이터 속성에서이 경로를 선택합니다. 이것은 우리가 경로와 함께 require.js 설정을 스 내핑 (spat) 한 이후의 방법입니다. 나는 좀 더 의사 코드로 질문을 업데이트하고있다 ... – Nervetattoo

4

requirejs.config를로드 할 수 require('extension/foo/bar') 부를 수는 언제든지 나중에 호출 할 수 있고, 로더는 함께 CONFIGS을 병합합니다. 따라서 'extension'에 대한 경로 설정을 위해 무엇을 사용하는지 알고 나서야 다른 requirejs.config() 호출을 통해 설정 한 다음 그 경로로 확장을로드해야합니다.

관련 문제