2009-10-29 62 views
7

在Dojo中实现跨域定制构建时遇到问题。 的情况如下:我有一个相当大的应用,具有良好的数字定位束,所以basicly目录结构就像是
核心\(我的模块)
NLS \
FR \
EN \
....
构建我的模块时,结果是一个很大的core.js/core.xd.js文件,它不包含本地化。在本地化的nls目录(en/fr/etc)中,我发现构建每个包建立/缩小后,每个语言core_fr.js/core_en.fs只包含Dojo/Dijit相关字符串。使用NLS /本地化的Dojo定制构建

所以我的构建脚本是

  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

我不是xd问题的专家,但我很好奇看到modulePaths中的nls条目。他们不应该是必要的。你在使用它们吗?如果你消除它们,它会产生什么影响? – peller 2009-10-29 18:32:19

+0

我删除了它们,没有更改,本地化仍未加载。我认为他们在那里因为一些遗留原因......但是你说的是对的。我相应地更新了这篇文章。 – aciobanu 2009-10-30 08:38:38

回答

5

几天前我有类似的问题。首先,您可以通过将可用语言环境设置为requireLocalization调用的第四个参数来解决错误。

例如

dojo.requireLocalization("core", "FuseboxContent", null, "en,fr"); 

虽然你不应该那样做。

你有没有尝试包括本地化如下?

dojo.requireLocalization("core", "FuseboxContent"); // and not dojo["require..."] 
+0

嗯,我这样做是因为我无法加载nls文件,所以通过这种方式我不会进入builder的方式。我锁定了这个问题,因为构建器没有合并[modulename] _fr.xd.js文件中的bundle,他在那里合并了dojo/dijit localisations。因此,在xd阶段,当他在图层的末尾执行preloadLocalisation时,我的本地化不会被加载。 我创建了一个虚拟文件,它需要所有的本地化来查看是否以这种方式“看到”它们并构建它们,但无济于事。 – aciobanu 2009-11-02 09:35:32