2012-03-21 9 views
8

acabo de empezar con RequireJS, pero estoy atascado en la parte en que quiero usar un archivo js que tiene dos define() en el mismo, así:RequireJS, dos clases en un archivo

Nombre del archivo: Test.js

define('test1', ['jquery'], function() { 
    return { 
     method1 : function() { 
      console.log("test1 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test1 - method 2"); 
     } 
    } 
}); 

define('test2', ['jquery'], function() { 
    return { 
     method1 : function() { 
      console.log("test2 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test2 - method 2"); 
     } 
    } 
}); 

también tengo una rutina de carga, js que se carga automáticamente por el marco RequireJS:

require(['jquery', 'test', 'test2'], function ($, t1, t2) { 
    console.log(t1); 
}); 

no encuentra el segundo parámetro, TH e 'archivo de prueba'. Solo, devuelve un 'null'. No puede encontrar 'test2' porque intenta buscar un archivo llamado 'test2.js'. De hecho, me gustaría hacer algo como:

require(['jquery', 'test.test1', 'test.test2'], function ($, t1, t2) { 
    console.log(t1); 
}); 

Pero en cualquier caso, me gustaría obtener un manejador tanto a los objetos. ¿¿Qué estoy haciendo mal??

+0

La granularidad es a nivel de archivo. No puede importar partes de un archivo. Solo importa "test.js" y obtendrás ambos objetos. – Pointy

+0

@Pointy Luego, todavía hay algo mal con mi código porque 'prueba' devuelve un objeto nulo. – w00

+0

Ah ... bueno, de acuerdo con la documentación de RequireJS, solo debe haber ** un ** módulo en cualquier archivo .js dado. – Pointy

Respuesta

16

No puede exportar dos módulos diferentes como este. Si desea mantenerlos como "submódulos" de 'prueba', de la manera correcta sería hacer:

define('test', ['jquery'], function() { 
    var exports = {}; 
    exports.test1 = { 
     method1 : function() { 
      console.log("test1 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test1 - method 2"); 
     } 
    }; 

    exports.test2 = { 
     method1 : function() { 
      console.log("test2 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test2 - method 2"); 
     } 
    }; 

    return exports; 
}); 

entonces usted puede hacer:

require(['test'], function (test) { 
    var test1 = test.test1; 
}); 
+0

Si tengo dos submódulos definidos allí, y sucede que uso solo uno de los módulos en mi código. ¿El optimizador r.js solo cargará uno de los módulos en el archivo final compilado? – Skurpi