2010-09-20 4 views
5

La mia domanda, sebbene inizialmente simile a this one, sembra essere una domanda di base e potrebbe segnalare un errore nel sistema di generazione. Ho creato una build personalizzata per la mia applicazione dojo. Ho solo costruire uno strato in questo momento, ecco cosa lo script profilo/oggetto assomiglia:Dojo Build con NLS - requireLocalization (..) fallisce?

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

Quando eseguo una build con quella descrizione emette file nella seguente struttura di directory:

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 

Infine , nella mia pagina HTML di prova - ho ottenuto il seguente:

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

Ma, purtroppo, Firebug sputa questo fuori di me:

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

cosa penso sta accadendo

ho tracciata attraverso una parte del codice che porta al l'errore precedente e sembra che l'dojo.i18n._preloadLocalizations() chiamata alla fine del file in realtà non caricare nella corretta file nls da ./release/nls.

Qualche idea su come risolvere il problema senza ricorrere manualmente ai file nls con i tag <script>?

+0

Ho riscontrato problemi simili. Non mi è chiaro se c'è un problema nel sistema di compilazione o nel caricatore. Ho deciso che se avessi chiamato il mio file layer nella stessa directory di dojo.js (cioè, rendilo "name: 'myProject.js'") e aggiustò il tag script per usare questo percorso (./release/ myProject/dojo/myProject.js.uncompressed.js), quindi il loader carica i file nls corretti. – tommyjr

+0

Immagino che questo abbia a che fare con il tuo modulePath nell'oggetto djConfig. Se guardi firebug o simili, quale URL è l'app che prova a caricare nls da vs da dove dovrebbe caricarlo? –

risposta