7

Dojo でクロスドメインのカスタムビルドを実装する際に問題があります。状況は次のとおりです。私はかなり大きなアプリケーションを持っており、多数のローカリゼーション バンドルを備えているため、基本的にディレクトリ構造は
core\ (私のモジュール)
nls\
fr\
en\
...
のようになります。大きなcore.js/core.xd.jsファイルであり、ローカリゼーションが含まれていません。ローカリゼーション nls ディレクトリ (en/fr/etc) で、ビルド後にビルド/縮小された各バンドルと、Dojo/Dijit 関連の文字列のみを含む各言語のより大きなファイル core_fr.js/core_en.fs を見つけます。

だから私のビルドスクリプトは

            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 関連のコンテンツのみが含まれます。ただし、ダミー ファイルにいくつかのバンドル ロードを追加しましたが、core/nls の内容は引き続きビルダーによって無視されます。

情報をありがとう、私は検索のほとんど終わりにいます。この件に関するネット上にはあまりありません。

4

1 に答える 1

5

数日前に同様の問題がありました。まず、requireLocalization 呼び出しの 4 番目のパラメーターとして使用可能なロケールを設定することで、エラーを回避できます。

例えば

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

あなたはそれをする必要はありませんが。

次のようにローカライズを含めてみましたか?

dojo.requireLocalization("core", "FuseboxContent"); // and not dojo["require..."]
于 2009-11-01T12:58:06.770 に答える