Im empezando a tipo de envolver mi cabeza alrededor RequireJS y la nueva estructura Dojo AMD, pero tienen un problema con algunas de las primeras pruebas:¿Por qué la sintaxis del Contenedor JJ Simplificado no funciona en mi módulo Dojo AMD?
CG/signup.js:
define(['dojo/_base/fx', 'dojo/dom'], function(fx, dom){
return function(){
this.hidePreloader = function(id){
var preloader = dom.byId(id);
fx.fadeOut({node : preloader}).play()
}
}
})
Esto funciona bien. En el archivo maestro cg.js:
require(['dojo/_base/kernel', 'dojo/_base/loader'])
dojo.registerModulePath('cg', '../cg')
require(['cg/signup', 'dojo/domReady!'], function(Signup){
var sp = new Signup();
sp.hidePreloader('preloader')
})
Bam. Hecho. Sin embargo, al usar la estructura simplificada CommonJS Wrapper:
define(function(require){
var fx = require('dojo/_base/fx'),
dom = require('dojo/dom');
return function(){
this.hidePreloader = function(id){
var preloader = dom.byId(id);
fx.fadeOut({node : preloader}).play()
}
}
})
Me sale un error undefinedModule. Parece provenir de la línea dojo/_base/fx
, pero no sé por qué.
ACTUALIZACIÓN
Para mayor claridad.
guiones index.html
<script type="text/javascript" src="js/dojo/dojo.js.uncompressed.js" data-dojo-config="isDebug:true,async:true"></script>
<script type="text/javascript" src="js/cg.js"></script>
cg.js
require(['dojo/_base/kernel', 'dojo/_base/loader'])
dojo.registerModulePath('cg', '../cg')
require(['cg/signup', 'dojo/domReady!'], function(signup){
signup.testFunc()
})
js/CG/signup.js
define(['require', 'exports'], function(require, exports){
var dom = require('dojo/_base/kernel');
// Any other require() declarations (with very very few exceptions like 'dojo/_base/array throw undefinedModule errors!!!
// without any error causing requires, this works fine.
exports.testFunc = function(){
alert("hello")
}
})
Hmm, una variación ligeramente diferente parece funcionar en jsFiddle. (Pero no puedo vincularlo ahora ya que JSFiddle está en modo de solo lectura.) ¿Podría dar más detalles sobre el error exacto? – Domenic
Ese es el error exacto. Al usar la técnica de contenedor simplificado CommonJS con las mismas rutas y las mismas instrucciones requeridas, la consola imprime un error 'undefinedModule'. Tengo 'isDebug = true' en la configuración del script y' debugAtAllCosts' no arroja nada más. ¿Cuál es la variación que funciona para usted? – Phix
No puedo separarme en varios archivos en JSFiddle, así que probé 'define (" foo ", function (require) {...})' donde '' 'contiene sus instrucciones requeridas, más' console.log' s para los objetos 'fx' y' dom'. Dos objetos de aspecto loco se registraron en la consola ... ¿Dojo 1.7.1? – Domenic