2011-09-25 6 views
1

게시물 제목이 완전히 설명되지 않을 수도 있지만, 여기에 내가 원하는 바가 있습니다. 별도의 파일에 자바 스크립트 코드가 있는데, 그렇게 배열했습니다.로드 시간에 vars가 설정되지 않은 JavaScript 파일을로드하십시오.

var PK = { 
    "vars" : { 
     "uris" : { 
      "app1": "http://this/server/", 
      "app2": "http://that/server/" 
     }, 

     "something": { 
      "objects": [], 
      "obj1": { "url": PK.vars.uris.app1 }, 
      "obj2": { "url": PK.vars.uris.app2 }         
     } 
    }, 

    "methods" : { 
     "doThis" : function(a) { 
      $.ajax({ 
       url: PK.vars.uris.app1, 
       data: data, 
       type: "GET", 
       success: function(data) { .. do something .. } 
      });  
     }, 

     "doThat" : function(a) { 
      $.ajax({ 
       url: PK.vars.uris.app2, 
       data: data, 
       type: "GET", 
       success: function(data) { .. do something else .. } 
      });  
     }, 

     "init" : function(position) { 
      if (position) { PK.methods.doThis(); 
      } 
      else { 
       PK.methods.doThat(); 
      } 
     } 
    } 
}; 

하고, 내 HTML에서, 나는 app1app2의 값이 설정 파일을 기반으로 서버에서 전송 된 다음

$(document).ready(function() { 
    PK.vars.uris.app1 = "[% app1 %]"; 
    PK.vars.uris.app2 = "[% app2 %]"; 
    PK.methods.init(); 
}); 

이 있습니다. 단, 별도의 JavaScript가로드 될 때 PK.vars.uris가 정의되어 있지 않으므로 예상대로 작동하지 않습니다. 물론 PK.vars.uris {}가 하드 코드 된 경우 모든 것이 아름답게 작동합니다.

문서가로드되고 JavaScript 코드에서 PK.vars.uris을 사용할 수있을 때까지 var PK의 평가를 지연시키는 방법은 무엇입니까?

+0

하지 내가 이해해야합니다 -하지만 당신은 그냥 먼저 별도의 파일을로드 할 수 있습니다? –

+0

흠 ... 나는 단순한 상황 인 것처럼 보이는 것을 설명하는데 어수선하지 않기를 바랬다. 내'external.js'에 정의 된'var PK = {}'이 있습니다. 그것은 스크립트 태그를 통해 메인 html 파일에로드됩니다. 동일한 html 파일에서'PK.vars.uris'의 값은'$ (document) .ready (function()'으로 초기화됩니다. 초기화 된 값이'외부에서'var PK '에 사용 가능하도록하고 싶습니다. js' – punkish

답변

2

이니셜 라이저에 값을 전달해야하는 문제가 있습니까?

이 접근 방법은 다음과 같습니다 외부 파일에서

:

function PK_Constructor(app1Uri, app2Uri) { 
     this.vars = { "uris" : { 
        "app1" : app1Uri, 
        "app2" : app2Uri 
      }, 
       "something": { 
        "objects": [], 
        "obj1": { "url": app1Uri }, 
        "obj2": { "url": app1Uri }         
       }, 
      }; 
     this.doThis = function(a) { 
      $.ajax({ 
       url: this.vars.uris.app1, 
       data: data, 
       type: "GET", 
       success: function(data) { .. do something .. } 
      }); 
     // etc 

    } 

그리고 HTML에서 :

// Ensuring PK has global scope 
    var PK = undefined; 

    $(document).ready(function() { 
     PK = new PK_Constructor("[% app1 %]", "[% app2 %]"); 
    }); 
+0

네, 작동합니다, 많은 감사합니다. 물론이 패턴을 수정하여 이니셜 라이저에 다른 여러 구성 매개 변수를 전달할 수있는 방법을 알아야합니다.하지만 적어도 진행할 항목이 있습니다. 다시 한번 감사드립니다. – punkish

관련 문제