我试图找出在Require.js中进行配置准继承的最佳方法。
我有一个root webapp,然后是他们自己的上下文中的子webapps,如下所示:
/
/configuration
/reporting
root(/)webapp将有一个基本的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范例,因为我必须在Require.js之外静态加载jQuery库。 任何想法如何更优雅地做到这一点?
我已经看过詹姆斯·伯克的多重例子,这些例子就是这样的,但我认为没有必要完全继承配置。
感谢您的帮助!
答案 0 :(得分:0)
我最后只是从其他几个来源中剔除非jquery扩展函数,所以我可以在require.js之前加载jquery ...
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);
希望能帮助别人。