2013-03-27 13 views
8

Ho visto molti esempi su Internet come iniziare a sviluppare applicazioni BB con requireJS ma sono un po 'perso.Backbone e RequireJS caricamento effettivo

Penso che AMD abbia l'obiettivo di caricare i file solo se davvero necessario. Non prima.

Perché sto vedendo esempi solo dove lo sviluppatore ha messo quasi tutti i file come dipendenza all'inizio del suo file principale?

Ecco un esempio: https://github.com/jcreamer898/RequireJS-Backbone-Starter/tree/master/js

Questa applicazione carica istantaneamente main.js che dipende app.js che carichi i router/home.js che richiede una vista/view.js che carichi modello e modelli della vista/model.js che ... e fine.

non riesco a vedere come estendere questa applicazione, ad esempio con più punti di vista in cui dipendenze Visto (i suoi modelli, modelli, collezioni, API di terze parti, ecc) di carico solo quando le chiamate router e loro inizializzazione. In un altro modo questo sarebbe privo di senso usare AMD dove carichi tutti i tuoi file durante l'inizializzazione della tua app.

esempio simile qui: http://backbonetutorials.com/organizing-backbone-using-modules/ vedere router.js file.Actually E 'views/progetti/list' carichi e 'viste/utenti/Lista' dipendenze, mentre il router non sa ancora se l'utente li avrà bisogno il futuro o no.

Si prega di avvisare, grazie in anticipo!

risposta

6

E 'un po' difficile vedere in un tale piccola applicazione di esempio, perché si deve caricare qualcosa sulla rotta iniziale, e il caricamento qualcosa in Backbone di solito significa un modello, una collezione, e una vista. Dato che l'esempio che hai linkato ne ha solo uno, allora sì stai caricando quasi tutto.

Quando si inizia a vedere la funzione "su richiesta" è dove si aggiungono percorsi/viste/modelli/ecc. Tenere presente, tuttavia, che il caricamento su richiesta è probabilmente un obiettivo secondario di AMD/RequireJS. L'obiettivo principale è modularity. Quindi ti offrono molte opzioni per caricare le cose su richiesta o per raggruppare tutto via the optimizer

Inoltre non c'è nulla che dice che devi mettere tutto il require() all'inizio del file. Puoi eseguirli in un secondo momento (ad esempio, quando inizi un percorso). Ecco una versione modificata di home.js dal tuo primo esempio collegato. Se stai utilizzando gli strumenti di sviluppo di Chrome puoi guardare la scheda di rete quando il "debugger"; la dichiarazione sospende l'esecuzione. Quindi continua l'esecuzione e vedi come vengono caricati gli altri script.

define([ 
    'jquery', 
    'backbone', 
    'underscore' 
    ], 
function($, Backbone, _){ 
    var Router = Backbone.Router.extend({ 
     initialize: function(){ 
      Backbone.history.start(); 
     }, 
     routes: { 
      '': 'home' 
     }, 
     'home': function(){ 
      debugger; 
      require(['views/view'], function (mainView) { 
       mainView.render(); 
      }); 
     } 
    }); 

    return Router; 
}); 

Vedere this person's article per ulteriori informazioni sullo sfondo e dove si potrebbe andare avanti con esso.

+0

Ho aggiunto un altro esempio in cui vi sono più viste e la logica dell'applicazione è ancora priva di questo punto on-demand. – zsitro

+0

Grazie! Il tuo esempio e l'articolo mi hanno aiutato molto. – zsitro

+0

Perfetto. Ho caricato un sacco di file per ogni percorso. Ora le cose stanno facendo un giro! Grazie! – matthoiland

Problemi correlati