2012-06-15 9 views
8

Diciamo che la mia app funziona, ma mi piace imparare e trovare il modo migliore di fare le cose.
Apprezzo molto questo post su Reducing Backbone Routers To Nothing More Than Configuration.
E il seguente bbclonemail che non sta utilizzando richiede.Come devo eseguire il bootstrap della mia web app usando Backbone.Marionette e requireJs

In realtà il mio implementazione è un blocco monolitico (app.js, router.js).

Ecco le mie domande:
1) Quale dovrebbe essere il router modulerouter.js ritorno?
2) Come devo rimuovere The Callback Functions da router.js?
3) Cosa deve restituire app moduleapp.js?
4) Come devo disaccoppiare il app.js in molti altri app (ad esempio: principale, le attività, i progetti)


app.js

// app.js 
define([ 
'router' 
// some modules 
], 
function (router, Backbone, HeaderView) 
{ 
    "use strict"; 
    var myApp = new Backbone.Marionette.Application(); 

    myApp.addRegions({ 
     header: '#header', 
     sidebar: '#sidebar', 
     mainColumn: '#main-column', 
     rightColumn: '#right-column' 
    }); 

    myApp.initHeader = function() { 
     var headerView = new HeaderView(); 
     myApp.header.show(headerView); 
    } 

    // many others many views 

    myApp.start(); 

    myApp.initialize = function() { 
     router.initialize(); 
     Backbone.history.start(); 
    } 

    return myApp; 

}); 

router.js

// router.js 
define([ 
// some modules 
], 
function (Backbone) 
{ 
    "use strict"; 
    var AppRouter = Backbone.Marionette.AppRouter.extend({ 

     routes: { 
      tasks: 'tasks', 
      projects: 'projects', 
      // many others keys/values 
      '*defaults': 'home' 
     }, 

     getApp: function() 
     { 
      var mainApp; 
      require(['js/app'], function (app) { 
       mainApp = app; 
      }); 
      return mainApp; 
     }, 

     home: function() 
     { 
      var app = this.getApp(); 
      app.initHeader(); 
      app.initSidebar(); 
      app.initTaskDetails(); 
     }, 

     // many others callbacks 

    }); 

    var initialize = function() { 
     new AppRouter; 
    }; 
    return { 
     initialize: initialize 
    }; 

}); 

risposta

1

Per la parte del router si dovrebbe fare in questo modo:

router.js

// router.js 
define([ 
    'rooterController' 
// some modules 
], 
function (Backbone, rooterController) 
{ 
    "use strict"; 
    var AppRouter = Backbone.Marionette.AppRouter.extend({ 

     routes: { 
      tasks: 'tasks', 
      projects: 'projects', 
      // many others keys/values 
      '*defaults': 'home' 
     } 
    }); 
    return new AppRouter({constroller: rooterController}) 
});