2013-10-19 2 views
1

우리 애플리케이션에서는 몇 가지 맞춤 위젯을 포함하여 일부 위젯에 dojo를 사용하고 여러 모듈에 대해 AMD 형식을 사용합니다.Dojo 레이어에서 AMD 모듈을로드하는 방법

define("foo.bar.module", ["dojo/_base/declare"], function(declare) { 

    var module = declare("foo.bar.module", [], { 
     // Do Stuff 
    } 

    return module; 
}); 

각 모듈은 개별적으로 요청되므로 현재 잘 작동합니다. 그러나 Dojo 계층을 사용하여 이것을 하나의 요청으로 축소하는 것이 좋은 최적화라고 판단했습니다.

문제는 레이어를 먼저로드 한 다음 레이어에 정의 된 모듈을 필요로하지만 도조 로더가 모듈을 찾을 수 없다는 것입니다. 이 작업을 수행하기 위해 빌드 프로파일에 특별히 필요한 것이 있습니까? 문서에 대한 도움이나 링크는 크게 감사하겠습니다.

답변

3

모듈 ID는 경로이며 개체 식별자는 아닙니다. define의 첫 번째 인수는 잘못되었습니다. 존재할 경우 foo/bar/module이어야합니다. 그러나 이식성을 손상 시키므로 define에 첫 번째 문자열 인수를 제공하면 안됩니다. 의도적으로 전역 범위에서 생성자를 만들려고하지 않는 한 declare에 첫 번째 문자열 인수를 제공하지 않아야합니다.

요약하면, 모듈 정의는 다음과 같아야합니다

  1. 레이어 단지도 추가 모듈을 포함하는 모듈이 내장되어 있습니다 :

    define(["dojo/_base/declare"], function(declare) { 
    
        var module = declare([], { 
         // Do Stuff 
        } 
    
        return module; 
    }); 
    

    마지막으로, 내장 층에 대해 주목해야 할 두 가지 중요한 것이있다. 빌드 전에 응용 프로그램에 이미 존재하는 모듈에서만 만들어야합니다. 예를 들어 전체 앱을로드하는 데 사용하는 app/main 모듈을 사용하면 좋은 레이어 모듈이됩니다. 새 레이어 용으로 새로운 app/layerA 모듈을 만드는 것은 잘못된 것입니다.

  2. 로더는 레이어가로드 될 때까지 레이어에 포함 된 모듈을 알 수 없습니다. 모듈 "a" "b"와 "c", 그리고 require([ "a", "b", "c" ])으로 레이어 "a"를 빌드하면 로더는 "a"에 "b"와 "c"가 포함되어 있음을 알 수 없으므로 세 모듈 모두 별도의 요청으로로드됩니다 ". 이 경우 항상 "a"를 먼저로드 한 다음 나중에 "b"와 "c"를로드해야합니다.이 시점에서 레이어는 별도로로드되는 대신로드됩니다. 빌드 프로파일 (dojo/dojo)에 boot: true를 갖는 하나 개의 층을 제외
  3. 이 층에 대한 <script> 태그를 포함하여 다른 모듈 require 또는 define를 사용하고, 하지 같은 방법으로로드해야 레이어 모듈.
+0

좋습니다. 그러나 이러한 변경 사항이 있더라도 문제는 해결되지 않습니다. 로더는 레이어에 포함될 때 모듈을 찾지 못합니다. 그것은 요청을하려고 시도하는 것 같아요 404 – ekj

+0

더 많은 정보를 추가했습니다. 대답을 얻기에 충분한 정보가 충분하지 않은 경우, HTML 부트 스트랩, Dojo 구성 또는 응용 프로그램에 대한 기타 정보 또는 계층 모듈로드 방법을 제공하지 않았기 때문입니다. –

+0

포인트 3이 문제 일 수 있습니다. 레이어에 스크립트 태그가로드되고 있습니다. 레이어를 올바르게로드하는 방법을 설명하는 설명서를 알고 있습니까? – ekj

관련 문제