2012-02-01 16 views
5

Ho problemi a concentrarmi principalmente su RequireJS. Vedo che è una buona/necessaria tecnologia, ma implementarla, per me, è stata una vera svolta. Apprezzo molto il tuo aiuto!Backbone/RequireJS e più modelli

Sto cercando di sviluppare un'applicazione abbastanza flessibili con Backbone e RequireJS. Il problema è che sono totalmente abituato a sintassi come new Person() senza dover specificare dipendenze. Esiste un modo efficace per utilizzare RequireJS con un numero piuttosto elevato di modelli? Penso che il mio problema funzioni sempre con i ritorni. Ho preso in considerazione l'utilizzo di un metodo factory per creare il modello con la funzione require, ma in tal caso è necessario che la funzione require sia sincrona, il che vanifica completamente lo scopo di RequireJS.

Semplicemente non mi sembra giusto dover richiedere tutti i miei modelli prima e poi includono quelli nella funzione di istanza - o no?

Avete suggerimenti o tutorial su come strutturare e modellare una domanda come questa?

Grazie per avermi aiutato!

jMax

risposta

21

È possibile utilizzare quello che io chiamo richiedo modello modulo js. Se sai che un gruppo di classi viene spesso usato insieme puoi fare qualcosa di simile.

In primo luogo è possibile definire ogni classe in un file separato e poi di definire un modulo per tenerli insieme

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 
    } 

}); 

E poi, quando si desidera utilizzare classe da questo modulo basta fare

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; 
}); 

Non credo che usando i moduli definiti con requirejs dovremmo restituire un'istanza, dovremmo sempre restituire un costruttore o un oggetto.

Si dovrebbe assolutamente abbracciare la definizione e che richiedono - con il tempo si inizia ad amarla - senza dover pensare molto su come aggiungere/monitoraggio dipendenze ecc ovunque a mano o (in modo 2005!) Con la maggior parte delle cose in un file :)

+0

Assolutamente fantastico. Grazie uomo! Vorrei poterti dare più reputazione ... –

+0

essere di aiuto è abbastanza :) –