我在Dojo中实现跨域自定义构建时遇到问题。
情况如下:我有一个非常大的应用程序,有大量的本地化包,所以基本上目录结构就像
核心\(我的模块)
NLS \
FR \
EN \
....
在构建我的模块时,结果是一个很大的core.js / core.xd.js文件,其中,bien sur,不包含本地化。在本地化的nls目录(en / fr / etc)中,我发现构建后每个包构建/缩小,以及每个语言的核心文件core_fr.js / core_en.fs,它只包含Dojo / Dijit相关字符串。
所以我的构建脚本是
layers: [
{
resourceName: "core",
name: "../core/trusted.js",
dependencies: [
"dojo.i18n",
//data
"dojox.data.JsonRestStore",
"dojox.data.XmlStore",
"dojox.rpc.Service",
"dojox.form.FileInput",
...
"core.controller.Fusebox"
],
prefixes: [
["dijit","../dijit"],
["dojox","../dojox"],
["core", "../core"]
]
在core.controller.Fusebox类中,我尝试加载1 nls
dojo["requireLocalization"]("core", "FuseboxContent");
这里它会死,但是
availableFlatLocales is undefined
[Break on this error] var locales = availableFlatLocales.split(",");\r\n
html文件中的配置是:
// version build
var djConfig = {
baseUrl: 'https://..../',
modulePaths: { 'core': 'core'},
useXDomain: true,
xdWaitSeconds: 10,
parseOnLoad: true,
afterOnLoad: true,
// debugAtAllCosts: true,
isDebug: true,
locale: "fr"
};
然后
<script type="text/javascript" src="http://xd.woopic.com/dojoroot/1.3.2-xd/dojo/dojo.xd.js.uncompressed.js"></script>
<script type="text/javascript" src="https://..../core/trusted.js.uncompressed.js"></script>
我当然使用未压缩的调试。 问题是,在运行时,Dojo尝试加载我的包并找不到它们,我想将它们嵌入到我的图层文件中,因此不需要额外的加载。 这可以实现吗?虽然我们在这里,是否有任何有跨域本地化的工作网站/示例? 更新:我继续我的分析,问题似乎在于我动态加载nls,因此构建解析器找不到requireLocalization()调用。因此,项目nls文件仅包含dojo / dijit相关内容。但是,我在虚拟文件中添加了一些bundle加载,并且构建器仍然忽略core / nls的内容。
感谢您提供任何信息,我几乎在搜索结束时,网上关于这个主题的内容并不多。
答案 0 :(得分:5)
几天前我遇到过类似的问题。首先,您可以通过将可用的语言环境设置为requireLocalization调用的第4个参数来解决错误。
e.g。
dojo.requireLocalization("core", "FuseboxContent", null, "en,fr");
虽然你不应该这样做。
您是否尝试将本地化包括在内?
dojo.requireLocalization("core", "FuseboxContent"); // and not dojo["require..."]