Cómo pasar parámetros a los módulos RequireJS

Author Top
enzo

RequireJS es una gran librería para la gestión de las dependencias de JavaScript y crear módulos de JavaScript para encapsular conceptos en tu aplicación. Si usted es totalmente nuevo con RequiteJS tal vez usted desea leer el mensaje de entrada Qué es y como funciona RequireJS.

1. El problema. 

Con RequireJS usted puede encapsular conceptos que pueden re usarse en otras áreas de su aplicación front-end. 

Permítanme mostrarles un ejemplo de un módulo RequireJS.

define([
  'backbone.marionette',
  'communicator'
],
function (Marionette, Communicator) {
    'use strict';

    var RegionManager = Marionette.Controller.extend({

      initialize: function (options) {
        console.log('Initialize a Region Manager');

        /* internal region manager */
        this._regionManager = new Marionette.RegionManager();

        /* event API */
        Communicator.reqres.setHandler('RM:addRegion', this.addRegion, this);
        Communicator.reqres.setHandler('RM:removeRegion', this.removeRegion, this);
        Communicator.reqres.setHandler('RM:getRegion', this.getRegion, this);
      },

      /* add region facade */
      addRegion: function (regionName, regionId) {
        var region = this.getRegion(regionName);

        if (region) {
          console.log('REGION ALREADY CREATED TO JUST RETURN REF');
          return region;
        }

        return this._regionManager.addRegion(regionName, regionId);
      },

      /* remove region facade */
      removeRegion: function (regionName) {
        this._regionManager.removeRegion(regionName);
      },

      /* get region facade */
      getRegion: function (regionName) {
        return this._regionManager.get(regionName);
      }
    });

    return RegionManager;
  });

Para utilizar este módulo en otro módulo que tiene que cargar el módulo como se puede ver a continuación.

define([
  'backbone.marionette','regionManager'],
   function (Marionette, RegionManager) {
  'use strict';

  var regionManager = new RegionManager();

});

El problema con la implementación anterior es que no se puede enviar parámetros al módulo RegionManager en la creación de instancia RegionManager.

2. La Solución.

Para resolver este problema que tenemos que hacer una aplicación de la inyección golpeteo diseño de Dependencia. 

Ahora hacer esto implementación del patron Inyección de dependencias, me permite cambiar un poco la forma de un módulo se crea añadiendo una función de objeto devuelto como se puede ver en la siguiente aplicación.

define(function(){
    return {
        init: function(Router){
          Router.appRoute('', 'home');
          Router.appRoute('login', 'login');
        }
    };
});

Como se puede ver en el código anterior la función init recibe el objeto Router y usamos este objeto para agregar dos rutas. 

Ahora déjenme mostrarle cómo este módulo es llamada desde otro módulo.

define([
  'backbone.marionette','router','routes'],
   function (Marionette, Router, Routes) {

    // Create Router instance.
    this._router = new Router({ App: this});

    // Set routes in router using dependency injection.
    Routes.init(this._router);
});

También se puede utilizar este tipo de función en el módulo para establecer una variable local que se utilizará más adelante para otras funciones internas. 

Espero que hayas encontrado este artículo de blog útil.