2011-07-28 191 views
0

我遇到的問題是一個文件中有一組變量值/屬性,另一個文件中存在一個庫。我已經開始重構代碼,但仍然需要以不同方式保留變量值(動態)和庫(靜態)。Javascript模塊模式幫助

我正在使用命名空間,並且總體上只需要一個全局命名空間。

我現在遇到的問題: 1.我該如何保留一個全局名稱空間 2.從一個文件中讀取值並將其用於另一個文件中的庫中的最佳方式是什麼?

如我想出了類似

//File ONE with values 
var main.dynamicvalues = (function(){ 
    var a = 10, 
    b = 20, 
    c = 30; 
    return { 
     a:a, 
     b:b, 
     c:c 
    } 
}()); 


//File TWO with core Library 
var main.library = (function(){ 
    //Various Private functions that need to use a,b,c variables from above main.dynamicvalues namespace 

    return { 
     //Public functions again need to use a,b,c from above namespace. 
    } 
}()); 

有沒有方法可以讓我有一個模式,這樣我只保留一個全局命名空間可以參考變量直接,而不必使用maincode.values.a在maincode.library.functions

感謝,maincode.values.b,maincode.values.c或像這樣 Sparsh古普塔

+0

嘗試AMD。 commonJS異步模塊定義 – Raynos

回答

2

這種方法稍微好一點,但它不完全是你要找的。

var main = {}; 

main.dynamicvalues = (function() { 
// same as before 
})(); 


main.library = (function(dyn){ 
     // use dyn.a, dyn.b etc 

     return { 

      // same in here 
     } 
    }(main.dynamicvalues)); 
1

創建一個新文件(可能命名爲類似 「common.js」)並把價值放在那裏。

0

您可以試試RequireJS。這可以讓你根本不需要全局命名空間(如果你願意的話)做你想做的事情。此外,它會爲您提供非阻塞腳本加載,處理依賴關係和構建工具的簡單方法。

另一方面,它可以剝奪你爲自己調查事物的樂趣,並更好地理解js架構模式。

您與RequireJs代碼可能是這樣的:

// File one with values, let's name it values.js 
define([], function() { 
    var a = 10, 
     b = 20, 
     c = 30; 
    return { 
     a: a, 
     b: b, 
     c: c 
    } 

}) 

// File two with library 
define([ 
    // load values.js as a dependency 
    'values' 
    // what is returned in values.js can be passed as an argument to the callback 
    ], function(values) { 
    values.a === 10 // true 
})