Estoy tratando de cargar los módulos dinámicamente como se describe al principio de este post:

Enlace de referencia

Aquí está mi scripts/main.js

require.config({
  baseUrl: 'scripts',
  paths: {
    jquery: 'lib/jquery-2.0.3'
  },
  config: {
    'main': {
      modules: ['mod1', 'mod2', 'mod3']
    }
  }
});

require(function(require, exports, module) {
  console.log("Loading modules");
  require(module.config().modules);
});

Cuando main.js se carga, el código en el interior de la exterior requieren función nunca es ejecutado y «la Carga de módulos» no se imprime en la consola. Después de haber leído el AMD documentación en En este enlace, yo no puedo ver lo que estoy haciendo mal. Cuál es la forma correcta de la carga dinámica de módulos definidos externamente en una matriz?

Gracias!

ACTUALIZACIÓN:

Aquí es lo que tengo ahora:

//main.js
require.config({
  ...
  config: {
    'some_module': {
      modules: ['mod1']
    }
  }
});

require(['some_module'], function(some_module) {
});

//some_module.js
define(function(require, exports, module) {
  var mods = module.config().modules;

  var mod;
  for (var i=0; i < mods.length; i++) {
    mod = require(mods[i]);
    mod.fn_call();
  }
});

Cuando ejecuto require(module.config().modules), mod1 de hecho se carga. No estoy seguro de cómo utilizar el valor de retorno requieren para llamar a una función que devuelve mod1, sin embargo.

Con el código de arriba, tengo

Uncaught Error: Module name "mod1" has not been loaded yet for context: _
http://requirejs.org/docs/errors.html#notloaded

¿Cómo puedo acceder a las funciones de los módulos estoy de carga?

InformationsquelleAutor martasd | 2014-01-27

2 Comentarios

  1. 1

    Debe utilizar el definir instrucción:

    define(function(require, exports, module) {
        console.log("Loading modules");
        require(module.config().modules);
    });

    Por config propiedad de RequireJS de configuración puede definir las configuraciones para cada uno de sus módulos. Luego, en el módulo de definición puede acceder a esa config, en su caso, a la carga de las dependencias.

    En cualquier caso, no creo que usted necesita para exponer su aplicación principal punto de entrada como un AMD módulo, porque no tiene sentido. Debe ser como esto:

    //some_module.js (or path for some_module alias)
    define(function(require, exports, module) {
        require(module.config().modules);
        ...
        return function () {};
    });
    
    //main.js
    require.config({
      ...
      config: {
        'some_module': {
          modules: ['mod1', 'mod2', 'mod3']
        }
      }
    });
    
    require('some_module'); //loads some_module, mod1, mod2, mod3
  2. 0

    ¿Por qué te carga los módulos de esta manera? Usted está tratando de hacer una llamada asincrónica dentro de un bucle, que básicamente están reescribiendo su «mod» de la variable cada vez con otra requerir incluso sin la llamada asincrónica de requerir la devolución de algo.

    //some_module.js
    define(function(require, exports, module) {
      var mods = module.config().modules;
    
      var mod;
      for (var i=0; i < mods.length; i++) {
        mod = require(mods[i]);//your loop doesn't will wait for it...
        mod.fn_call();
      }
    });

    De carga de los módulos de esta manera y si quieres poner algunas dependencias, debe hacerlo con config(http://requirejs.org/docs/api.html#config), no veo razón alguna para no hacerlo…

    define(['mod1', 'mod2', 'mod3'], function(mod1, mod2, mod3) {
             //do whatever you want with your modules
        });
    • Como he descrito anteriormente, me gustaría módulos de carga de forma dinámica a partir de un conjunto de variables que se especifican en la configuración de la propiedad de Require.js de configuración. Una vez cargado, me gustaría llamar a una función que devuelve cada uno de los módulos. ¿Que sentido? Hay una manera mejor de hacer esto?
    • la forma en que usted está haciendo no tiene ningún sentido.
    • Podría por favor explicar por qué no hacer sentido? Tengo el mismo código que me gustaría a ejecutar por cada uno de los módulos – crear un botón con un atributo onClick, que desencadena una función que está definida por cada módulo. Por esa razón, me gustaría tener una variable de matriz a la que puedo añadir tantos módulos como necesito, cuyas funciones se utilizan en un bucle que crea un botón para cada uno. De nuevo, podría usted comentar por qué esto no es dar sentido y lo que es una mejor manera de hacer esto?
    • Ya he dicho por qué esto no tiene sentido, ni en requirejs y ni en javascript funciona de la manera que usted quiere que funcione, y si desea utilizar estos módulos, se puede utilizar en un módulo que llame a su módulos como yo lo hice antes y en la misma forma que lo hizo con la matriz, con el módulo se puede añadir o eliminar cualquiera de los módulos que desea llamar y poner en cualquier orden de dependencias(ver config para ello).
    • suena como que usted necesita para leer en el abierto-cerrado de principio. Es un patrón común a registrarse una lista de implementaciones a través de la configuración de algún tipo. Entonces, el objeto que recibe un desconocido lista de implementaciones (no codificado como dependencias) – a continuación, ejecutar ellos ciegamente, haciendo que el módulo abierto por extensión, se ha cerrado aún para su modificación. Que requieren fijo de parámetros se rompe esta regla.

Dejar respuesta

Please enter your comment!
Please enter your name here