Dojo Build с NLS — ошибка requireLocalization(..)?

Мой вопрос, хотя сначала несколько похож на этот вопрос, кажется более простой вопрос - и может сигнализировать об ошибке в системе сборки. Я создал пользовательскую сборку для своего приложения для додзё. Сейчас я создаю только один слой, вот как выглядит скрипт/объект профиля:

dependencies = {
    stripConsole: "all",
    action: "release",
    optimize: "shrinksafe",
    releaseName: "myProject",
    // list of locales we want to expose
    localeList: "en-gb,en-us,de-de",

    layers: [
        {
            // Name: a relative path from the dojo.js in the desination directory.
            name: "../../myProject.js",
            dependencies: [
                "myPackage.MyDataStore",
                // MyWidget depends on a few other widgets, and has its own 
                //   translation files.
                "myPackage.MyWidget"
            ]
        }
    ],

    prefixes: [
        // These paths are relative to the location of dojo.js
        [ "dijit", "../dijit" ],
        [ "dojox", "../dojox" ],
        [ "myPackage", "../../../src/myPackage" ]
    ]
}

Когда я запускаю сборку с этим описанием, она выводит файлы в следующей структуре каталогов:

release/
release/myProject/
release/myProject/dijit/
                       ... dijit ...
release/myProject/dojo/
                      ... dojo ...
release/myProject/dojox/
                       ... dojox ...
release/myProject/myPackage/
                           ... my custom package ...
release/nls/
           myProject_en-us.js
           myProject_de.js
           etc..
../myproject.js
../myProject.js.uncompressed.js

Наконец, на моей тестовой HTML-странице у меня есть следующее:

<script type="text/javascript">
    var djConfig = {
        debug: true,
        parseOnLoad: false,
        modulePaths: { // paths to directories in relation to dojo's location.... hurr.
            'myPackage': '../myPackage',
            'dojox':    '../dojox',
            'dijit':    '../dijit'
        }
    };
</script>
<script type="text/javascript" src="./release/myProject/dojo/dojo.js.uncompressed.js"></script>
<script type="text/javascript" src="./release/myProject.js.uncompressed.js"></script>
<script type="text/javascript">
dojo.addOnLoad(function(){
    dojo.require('myPackage.MyDataStore');
    dojo.require('myPackage.MyWidget');

    var store = new myPackage.MyDataStore();
    var widget = new myPackage.MyWidget({
        store: store
    }, dojo.byId('testWidget'));

    widget.startup();
});
</script>

Но, к сожалению, Firebug выплевывает мне это:

Bundle not found: MyWidget in myPackage , locale=en-us

Что я думаю, что происходит

Я проследил часть кода, приведшего к вышеуказанной ошибке, и кажется, что вызов dojo.i18n._preloadLocalizations() в конце файла на самом деле не загружается в правильный файл nls из ./release/nls.

Есть идеи, как это исправить, не прибегая к ручному включению файлов nls с тегами <script>?


person JasonWyatt    schedule 20.09.2010    source источник
comment
Я столкнулся с подобными проблемами. Мне непонятно, проблема в системе сборки или в загрузчике. Я определил, что если я назову свой файл слоя так, чтобы он находился в том же каталоге, что и dojo.js (то есть назову его: «myProject.js»), и настрою тег сценария для использования этого пути (./release/myProject/ dojo/myProject.js.uncompressed.js), то загрузчик загружает правильные файлы nls.   -  person tommyjr    schedule 13.01.2011
comment
Я предполагаю, что это связано с вашими модулями в объекте djConfig. Если вы посмотрите на firebug или что-то подобное, с какого URL-адреса приложение пытается загрузить nls и откуда оно должно его загружать?   -  person    schedule 15.08.2011


Ответы (1)


Это ошибка dojo, вы не должны использовать '..' в имени вашего слоя, если он сгенерирует пакет NLS.

см. http://bugs.dojotoolkit.org/ticket/5225.

person hbaaron    schedule 20.10.2011