2010-09-20 4 views
5

Meine Frage, die zunächst etwas ähnlich zu this one ist, scheint eine grundlegendere Frage zu sein - und könnte einen Fehler im Build-System signalisieren. Ich habe einen benutzerdefinierten Build für meine Dojo-Anwendung erstellt. Ich baue nur eine Schicht gerade jetzt, hier ist es, was das Profil Skript/Objekt wie folgt aussieht:Dojo Build mit NLS - requireLocalization (..) fehlgeschlagen?

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" ] 
    ] 
} 

Wenn ich einen Build mit dieser Beschreibung ausgeführt es gibt Dateien in der folgenden Verzeichnisstruktur:

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 

Schließlich , in meinem Test-HTML-Seite - ich habe folgendes bekam:

<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> 

Aber leider Firebug spuckt das bei mir aus:

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

Was ich denke, ist Happening

ich durch einen Teil des Codes verfolgt haben zu dem obigen Fehler führt und dass es scheint, wie der dojo.i18n._preloadLocalizations() Anruf am Ende der Datei lädt nicht wirklich in den richtigen Nls-Datei von ./release/nls.

Haben Sie eine Idee, wie Sie dies beheben können, ohne die nls-Dateien mit <script> Tags manuell einzuschließen?

+0

Ich habe ähnliche Probleme festgestellt. Es ist mir nicht klar, ob ein Problem im Build-System oder im Loader vorliegt. Ich habe festgestellt, dass, wenn ich meine Layer-Datei im selben Verzeichnis wie dojo.js benannt habe (das heißt, mache es "name: 'myProject.js'") und passe das Script-Tag an, um diesen Pfad zu verwenden (./release/ myProject/dojo/myProject.js.uncompressed.js), dann zieht der Loader die korrekten nls-Dateien ein. – tommyjr

+0

Ich vermute, dass dies mit Ihren modulPfads im djConfig-Objekt zu tun hat. Wenn du dir Firefebug oder ähnliches anschaust, welche URL versucht die App die nls von vs zu laden, wo sollte sie geladen werden? –

Antwort