2013-10-24 9 views
0

이것은 this 질문에 대한 후속 조치입니다. Dojo가 AMD에 유산을 제공합니다

그래서 나는이 사전 AMD 도장 코드가 있습니다 this 이전 링크를 읽은 후, 나는,이 실패 분명히이

som.var.iable = {A:1,B:2}; 
som.var.iable2 = {C: 3, D:som.var.iable.B} 

define([ 
    "dojo/_base/declare", 
], function(declare){ 
    return declare("abc.def.foo", null {    
    }); 
}); 

define([ 
    "dojo/_base/declare", 
], function(declare){ 
    som.var.iable = {A:1,B:2}; 
som.var.iable2 = {C: 3, D:som.var.iable.B} 
    return declare("blah", null { 
     //code based on the above variables 
    }); 
}); 

같은 것을 시도하고, AMD의 경우

dojo.require(...); 
dojo.provide("abc.def.foo"); 
som.var.iable = {A:1,B:2}; 
som.var.iable2 = {C: 3, D:som.var.iable.B} 
dojo.declare("blah",[],{ 
    //code based on the above variables 
}); 

som.var.iable과 같은 개체 구조가 없습니다. 할 수 있지만 내 질문은 어떻게 레거시 코드에서 작동합니까? 올바른 AMD에 해당하는 제품은 무엇입니까?

도움을 주시면 대단히 감사하겠습니다.

답변

1

OK, 여기 내 가정은 당신이하려는 일에 대해 다음과 같습니다

  1. 을 당신은 정말이 속성 varsome라는 전역 변수를 필요로하지 않는, 즉 물건을 정리하는 단지 방법
  2. some/var/iable, some/var/iable2blah의 세 가지 모듈이 필요합니다. 이 때문에에만 blah 요구 생성한다 따라서 declare()

를 사용하는 ... 그들은 그냥 평범한 오래된 객체있어, 세 개의 파일과 세 define() 전화

  • 어느 som.var.iablesom.var.iable2 실제 상속 클래스는 의미 모듈은

    define([ 
    ], 
    function(){ 
        return {A:1,B,2} 
    }); 
    

    그리고 또 다른 som/var/iable2.js라고 : A는 일반 객체를 제공하는 파일 som/var/iable.js, 즉, 일반 객체 제공 : 다음

    define([ 
        "som/var/iable", 
    ], 
    function(iable){ 
        return {C: 3, D:iable.B} 
    }); 
    

    그리고이 세 번째 모듈 클래스 객체 제공 blah.js :

    define([ 
        "dojo/_base/declare", 
        "som/var/iable2" 
    ], 
    function(declare,iable2){ 
        var parentClasses = []; 
        var clazz = declare(parentClasses, { 
         constructor : function(){ 
          // No need for this.inherited(arguments) in this particular case   
          alert("Welcome to the constructor. Did you know that iable2.D is "+iable2.D+"?"); 
         }, 
    
        }); 
        return clazz; 
    }); 
    

    나는이 모든 테스트를하지 않은,하지만 페이지에 킥오프 당신 마지막으로 넣을 거라고 :

    require(["blah",dojo/domReady!"], function(blah){ 
        var b = new blah(); 
    }); 
    

    도장은

    을 말한다 경고를 얻을 수 있도록에서-위해 모든 것을로드의주의를 기울여야한다

    생성자에 오신 것을 환영합니다. iable2.D가 2라는 것을 알고 있습니까?

  • +0

    고마워요! 그건 의미가 있습니다. 예, 변수는 구성 모듈입니다. 그래서 레거시 코드에서 이것은 자동으로 처리 되었습니까? – rgamber

    +0

    나는 레거시 코드가 어떻게 작동하는지 100 % 확신하지는 못했지만, 관습에 따라 너무 많이 자동적 인 것처럼 보였다. 'dojo.provide ("foo.bar")'를 사용했다면, 시스템은 전역 변수'foo'가'bar'라는 속성과 함께 존재할 것이라고 예상하도록 시스템에 알려주었습니다. 너 스스로. – Darien