2012-01-03 11 views
10

Estoy usando la CDN de Google y también estoy tratando de cargar mis propios módulos de AMD usando su cargador. Sé que estoy haciendo algo mal, pero estoy atascado. ¿Algunas ideas?¿Cómo cargar módulos personalizados de AMD cuando se usa Dojo a través de CDN?

<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.7.0/dojo/dojo.js" 
      type="text/javascript" data-dojo-config="async:true,parseOnLoad:true"></script> 
    <script type="text/javascript"> 
     require(["dojo/_base/kernel", "dojo/_base/loader", "dojo/parser"], function(dojo){ 
      dojo.registerModulePath("pgGallery", "http://127.0.0.1:8080/js"); 
     }); 
     require(["pgGallery/Message"], function(m){ 
      m.success("foo"); 
     }); 
    </script> 

http://127.0.0.1:8080/js/Message.js es la ubicación del módulo.

Respuesta

11

Descubrí cómo hacerlo aquí: http://dojotoolkit.org/reference-guide/quickstart/cross-domain.html en "Uso de CDN con módulos locales".

El ejemplo de la página:

<script type="text/javascript"> 
    var dojoConfig = { 
     async: true, 
     packages: [ 
      { 
       name: "my", 
       location: "/absolute/path/to/local/modules" 
      } 
     ] 
    }; 
</script> 

<!-- Bootstrap Dojo From Google's CDN --> 
<!-- removing the protocol from src url auto detects if current page is served via http or https and also loads the dojo resources from matching protocol --> 
<script 
    type="text/javascript" 
    src="//ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojo/dojo.js"> 
</script> 

<script type="text/javascript"> 
    require(["my/FooModule"], function(FooModule){ 
     // ... 
    }); 
</script> 
+0

Es por eso que me encanta require.js - no tiene problemas con la carga entre dominios de los módulos de AMD. – Lucero

0

Otra opción que se supone que funciona, lo que estoy usando es esto. Tenga en cuenta el ".js". De alguna manera, el cargador lo trata de manera diferente.

require(["pgGallery/Message.js"], function(m){ 
     m.success("foo"); 
    }); 

Ver: http://dojotoolkit.org/reference-guide/1.8/loader/amd.html.

Si moduleId comienza con un protocolo (por ejemplo, “http:”) o una barra diagonal, o termina con un sufijo”.js”, asumir la petición es para un trozo arbitraria de JavaScript, no una módulo.

Lo que no sé es si esta es la mejor práctica o no.

Cuestiones relacionadas