Ho riscontrato un problema nell'implementazione di una build personalizzata cross-domain in Dojo. La situazione è la seguente: ho un abbastanza grande applicazione, con un buon numero di fasci di localizzazione, in modo fondamentalmente le strutture di directory è come
nucleo \ (il mio modulo)
NLS \
fr \
it \
....
Quando si genera il mio modulo, il risultato è un grande file core.js/core.xd.js, che, bien sur, non contiene le localizzazioni. Nelle directory nls di localizzazione (en/fr/etc) trovo dopo la compilazione ogni bundle creato/minificato, e un file più grande per ogni lingua, core_fr.js/core_en.fs, che contiene solo stringhe relative Dojo/Dijit.Creazione personalizzata Dojo con NLS/localizzazione
quindi il mio script di build è
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"]
]
Nella classe core.controller.Fusebox provo a caricare 1 nls
dojo["requireLocalization"]("core", "FuseboxContent");
qui morirà, ma con
availableFlatLocales is undefined
[Break on this error] var locales = availableFlatLocales.split(",");\r\n
La mia configurazione nel file html è:
// version build
var djConfig = {
baseUrl: 'https://..../',
modulePaths: { 'core': 'core'},
useXDomain: true,
xdWaitSeconds: 10,
parseOnLoad: true,
afterOnLoad: true,
// debugAtAllCosts: true,
isDebug: true,
locale: "fr"
};
e poi
<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>
ho usato il compresso per il debug, naturalmente. Il problema è che, durante il runtime, Dojo prova a caricare i miei bundle e non riesce a trovarli, e vorrei incorporarli nel mio file layer, quindi non sarà richiesto alcun carico aggiuntivo. Questo obiettivo può essere raggiunto? E mentre ci siamo, ci sono siti/esempi di lavoro con localizzazioni cross-domain? AGGIORNAMENTO: ho continuato la mia analisi e il problema sembra dipendere dal fatto che sto caricando dinamicamente nls, quindi il parser di compilazione non riesce a trovare le chiamate requireLocalization(). Pertanto il file nls del progetto contiene solo contenuti correlati a dojo/dijit. Tuttavia, ho aggiunto alcuni carichi di bundle in un file fittizio e il contenuto di core/nls è ancora ignorato dal builder.
Grazie per qualsiasi informazione, sono praticamente alla fine delle mie ricerche, non c'è molto in rete su questo argomento.
Non sono un esperto di problemi xd, ma ero curioso di vedere le voci nls in modulePaths. Non dovrebbero essere necessari. Li stai usando e fa qualche differenza se li elimini? – peller
Li ho rimossi, nessuna modifica, le localizzazioni non sono ancora state caricate. Penso che siano lì per via di alcune ragioni legacy ... ma avevi ragione sono la semplicità. Ho aggiornato il post di conseguenza. – aciobanu