2012-02-01 14 views
5

Tengo problemas para hacerme a la idea principalmente de RequireJS. Veo que es una tecnología buena/necesaria, pero implementarla, para mí, ha sido un verdadero esfuerzo. ¡Agradezco enormemente tu ayuda!Backbone/RequireJS y modelos múltiples

Estoy tratando de desarrollar una aplicación bastante flexible con Backbone y RequireJS. El problema es que estoy totalmente acostumbrado a la sintaxis como new Person() sin tener que especificar dependencias. ¿Existe una forma eficiente de utilizar RequireJS con un buen número de modelos? Creo que mi problema siempre está trabajando con devoluciones. Consideré usar un método de fábrica para crear el modelo con la función require, pero para hacerlo necesito que la función require sea síncrona, lo que derrota por completo el objetivo de RequireJS.

Simplemente no parece correcto tener que requerir todos mis modelos primero y luego incluirlos en la función de creación de instancias, ¿o no?

¿Tiene alguna sugerencia o tutorial sobre cómo estructurar y modelar una aplicación como esta?

¡Gracias por ayudarme!

JMax

Respuesta

21

Usted puede usar lo que llamo Patrón obligatorio módulo de js. Si sabes que un grupo de clases a menudo se usan juntas, puedes hacer algo como esto.

En primer lugar se define cada clase en un archivo separado y luego definir un módulo para mantenerlos juntos

Module.js 

define([ 

    './models/FirstModel', 
    './models/SecondModel', 
    './views/FirstView', 
    './views/SecondView', 
    'txt!./templates/template.tpl' 

], function(FirstModel, SecondModel, FirstView, SecondView, template) { 

    return { 
     FirstModel: FirstModel, 
     SecondModel: SecondModel, 
     FirstView: FirstView, 
     SecondView: SecondView, 
     template: template 
    } 

}); 

Y luego, cuando desea utilizar la clase de este módulo que acaba de hacer

define(['./Module'], function(Module) { 

    var AView = Module.FirstView.extend({ 

     model: Module.FirstModel, 

     render: function() { 

      this.html(_.template(Module.template)(this.model.attributes)); 

      if (something) { 

       this.$el.append(new Module.SecondView().render().el); 
      } 
     } 
    }) 

    return AView; 
}); 

No creo que al usar módulos definidos con requirejs deberíamos devolver una instancia, siempre debemos devolver un constructor o un objeto.

Debería abrazar por completo la definición y la exigencia - con el tiempo lo empezará a encantar - sin tener que pensar mucho sobre agregar/rastrear dependencias, etc. en todas partes a mano o (¡así 2005!) Teniendo la mayoría de las cosas un archivo :)

+0

absolutamente increíble. ¡Gracias hombre! Desearía poder darle más reputación ... –

+0

siendo de ayuda es suficiente :) –

Cuestiones relacionadas