2013-02-12 73 views
2

我想弄清楚在Require.js中執行配置的準繼承的最佳方法。是否可以使用Require.js執行配置繼承?

我有一個根we​​b應用,那麼孩子的webapps下在自己的環境中,這樣的:

/ 
/configuration 
/reporting 

根(/)Web應用程序將有一個基地Require.js配置對象,那麼配置和報告webapps會有自己的覆蓋。我已經得到它使用jQuery的擴展方法,如工作:

var rootConfig = { 
    // lots of stuff here: paths, shim, and baseUrl 
} 
var localConfig = { 
    paths: { 
     // this app wants to have a different version, so override 
     jqueryui: '/js/lib/ui/jquery-ui-1.8.22.custom.min' 
    } 
} 

var mergedConfig = {}; 
$.extend(true, mergedConfig, rootConfig, localConfig); 

require.config(mergedConfig); 

這工作得很好,但它那種打破了Require.js範式,因爲我必須加載jQuery庫靜態之外的要求。 JS。 任何想法如何更優雅地做到這一點?

我看了一下James Burke的多頁面示例,這些內容是沿着這些線的,但我不認爲那裏的關鍵是要精確地繼承配置。

感謝您的幫助!

回答

0

我最終只是撲殺從做的伎倆一對夫婦的其他來源的非jQuery的擴展功能,這樣我就可以繼續加載的jQuery做它require.js之前...

var com = com || {}; 
com.my = com.my || {}; 
com.my.extend = function (obj1, obj2) { 
for (var p in obj2) { 
    try { 
     if (obj2[p].constructor == Object) { 
      obj1[p] = com.my.extend(obj1[p], obj2[p]); 
     } else { 
      obj1[p] = obj2[p]; 
     } 
    } catch(e) { 
     obj1[p] = obj2[p]; 
    } 
} 

return obj1; 
} 

..然後在調用require.config之前使用它來擴展/合併配置對象,例如:

// merge localConfig with the root config 
var com.my.mergedConfig = 
com.my.extend(com.my.rootConfig, com.my.childConfig); 

// apply the configuration to require.js 
require.config(com.my.mergedConfig); 

希望能幫助別人。