2011-09-25 54 views
1

帖子標題可能沒有完全解釋,但這裏是我希望做的:我在一個單獨的文件中有我的JavaScript代碼,並且我已經安排它如此編排加載一個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,我有以下

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

其中app1app2值是基於配置文件服務器發送。除此之外,它無法按預期工作,因爲當單獨的JavaScript加載時,PK.vars.uris當時沒有定義。當然,如果我有PK.vars.uris {}硬編碼,一切都很好。

如何才能延遲評估var PK,直到文檔已加載並且PK.vars.uris可用於JavaScript代碼?

+0

不知道我理解 - 但你只是第一次加載單獨的文件? –

+0

嗯...我希望我沒有搞錯解釋看起來很簡單的情況。我的'external.js'具有定義的'var PK = {}'。它通過腳本標籤加載到主html文件中。在同一個html文件中,'PK.vars.uris'的值被初始化爲'$(document).ready(function()'。我想確保初始化的值可用於'external'中的'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

相關問題