2009-10-29 9 views
7

Tengo un problema al implementar una creación personalizada de dominio cruzado en Dojo. La situación es la siguiente: tengo una bonita aplicación de gran tamaño, con un buen número de paquetes de localización, por lo que, básicamente, las estructuras de directorios es como
núcleo \ (mi módulo)
nls \
fr \
es \
....
Al construir mi módulo, el resultado es un gran archivo core.js/core.xd.js, que, bien sur, no contiene las localizaciones. En los directorios nls de localización (en/fr/etc) encuentro después de la compilación cada paquete incorporado/minificado, y un archivo más grande para cada idioma, core_fr.js/core_en.fs, que contiene solo cadenas relacionadas con Dojo/Dijit.Creación personalizada de Dojo con NLS/localización

así que mi escritura de la estructura es

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

En la clase core.controller.Fusebox intento cargar 1 NLS

dojo["requireLocalization"]("core", "FuseboxContent"); 

aquí que va a morir, sin embargo, con

availableFlatLocales is undefined 
[Break on this error] var locales = availableFlatLocales.split(",");\r\n 

Mi configuración en el archivo html es:

// version build 
    var djConfig = { 
    baseUrl: 'https://..../', 
    modulePaths: { 'core': 'core'}, 
    useXDomain: true, 
    xdWaitSeconds: 10, 
    parseOnLoad: true, 
    afterOnLoad: true, 
// debugAtAllCosts: true, 
    isDebug: true, 
    locale: "fr" 
    }; 

y luego

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

he utilizado la sin comprimir para depurar, por supuesto. El problema es que, en tiempo de ejecución, Dojo intenta cargar mis paquetes y no puede encontrarlos, y me gustaría incrustarlos en mi archivo de capa, por lo que no se requerirán cargas adicionales. ¿Se puede lograr esto? Y mientras estamos en ello, ¿hay sitios/ejemplos que funcionen con ubicaciones de dominios cruzados? ACTUALIZACIÓN: continué mi análisis y el problema parece residir en el hecho de que estoy cargando nls dinámicamente, por lo que el analizador de compilación no puede encontrar las llamadas a requireLocalization(). Por lo tanto, el archivo nls del proyecto contiene solo contenido relacionado con dojo/dijit. Sin embargo, agregué algunas cargas agrupadas en un archivo ficticio, y el constructor todavía ignora el contenido de core/nls.

Gracias por cualquier información, estoy casi al final de mis búsquedas, no hay mucho en la red sobre este tema.

+0

No soy un experto en xd issues, pero tenía curiosidad por ver las entradas nls en modulePaths. No deberían ser necesarios. ¿Los estás usando y hay alguna diferencia si los eliminas? – peller

+0

Los eliminé, sin cambios, las localizaciones aún no están cargadas. Creo que estaban allí por alguna razón heredada ... pero tenías razón, eres útil. Actualicé la publicación en consecuencia. – aciobanu

Respuesta

5

Tuve un problema similar hace unos días. En primer lugar, puede evitar el error configurando las configuraciones regionales disponibles como el 4º parámetro de la llamada requireLocalization.

p. Ej.

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

aunque no debería tener que hacer eso.

¿Intentó incluir la localización de la siguiente manera?

dojo.requireLocalization("core", "FuseboxContent"); // and not dojo["require..."] 
+0

Bueno, yo hago eso porque cargo dinamicamente los archivos nls, así que de esta manera no me meto en el camino del constructor. Restringí el problema en el hecho de que el constructor no fusiona los paquetes en el archivo [modulename] _fr.xd.js, donde fusiona las localizaciones de dojo/dijit. Entonces, en la fase xd, cuando realiza la localización previa de la carga al final de la capa, mis localizaciones no se cargan. Creé un archivo ficticio que requiere todas las localizaciones para ver si de esta manera las "vería" y las construiría, pero no sirvió. – aciobanu

Cuestiones relacionadas