2012-06-15 9 views
8

Digamos que mi aplicación funciona pero me encanta aprender y encontrar la mejor manera de hacer las cosas.
Realmente agradezco esta publicación sobre Reducing Backbone Routers To Nothing More Than Configuration.
Y el siguiente bbclonemail que no está utilizando requiere.¿Cómo debo arrancar mi aplicación web usando Backbone.Marionette y necesitoJs

En realidad mi aplicación es un bloque monolítico (app.js, router.js).

aquí está mi pregunta:
1) ¿Cuál debe ser el retorno router modulerouter.js?
2) ¿Cómo debo eliminar The Callback Functions de router.js?
3) ¿Qué debe devolver el app moduleapp.js?
4) ¿Cómo debería desacoplar la app.js en muchas otras aplicaciones (por ejemplo: principal, tareas, proyectos)


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

}); 

Respuesta

1

Para la parte de router debe hacer así:

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