我在Dojo中实现跨域自定义构建时遇到问题.情况如下:我有一个非常大的应用程序,有大量的本地化包,所以基本上目录结构就像
core \(我的模块)
nls\
fr\
en\
....
当构建我的模块时结果是一个很大的core.js/core.xd.js文件,其中,bien sur,不包含本地化.在本地化NLS目录(EN/FR /等)我构建每捆建造/精缩,并为每种语言,core_fr.js/core_en.fs一个更大的文件,该文件只包含道场/ 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" };
然后
当然,我使用未压缩的调试.问题是,在运行时,Dojo尝试加载我的包并找不到它们,我想将它们嵌入到我的图层文件中,因此不需要额外的加载.这可以实现吗?虽然我们在这里,是否有任何有跨域本地化的工作网站/示例?更新:我继续我的分析,问题似乎在于我动态加载nls,因此构建解析器找不到requireLocalization()调用.因此,项目nls文件仅包含dojo/dijit相关内容.但是,我在虚拟文件中添加了一些bundle加载,并且构建器仍然忽略core/nls的内容.
感谢任何信息,我几乎在搜索结束时,网上关于这个主题的内容并不多.
几天前我遇到过类似的问题.首先,您可以通过将可用的语言环境设置为requireLocalization调用的第4个参数来解决错误.
例如
dojo.requireLocalization("core", "FuseboxContent", null, "en,fr");
虽然你不应该这样做.
您是否尝试将本地化包括如下?
dojo.requireLocalization("core", "FuseboxContent"); // and not dojo["require..."]