2012-03-07 10 views
9

Aquí está mi archivo application-router.js donde estoy creando Backbone.Router objeto con sólo sólo pocas rutas:Agregando rutas mediante programación a Backbone.Router?

var App = App || {}; 

App.Router = Backbone.Router.extend({ 
    routes : { 
     ''  : 'showDashboard', // Not shown 
     '*other': 'showModalError' 
    }, 
    defaultRoute : function(other) { $('#modal404').modal(); } 
}); 

En archivo principal javascript application.js me gustaría agregar mediante programación rutas. He intentado con la función route() y no funciona, las rutas no se agregan. Sin embargo funciona pasar un objeto a la "constructor", pero que anulará rutas ya definidas:

// This works and overrides all defined routes in App.Router 
var router = new App.Router({ routes : { '/test/me' : 'testRoute' } }); 

// This is not working 
router.route(ExposeTranslation.get('customers.new.route'), 'newCustomer'); 
router.route('/test/me/again', 'testAgainRoute'); 

De hecho console.log(App.Router) espectáculos:

routes Object { /test/me="testRoute"} 

supongo que me falta algo que no puedo averiguar, estoy empezando a aprender esta pequeña pieza de javascript poderoso.

Respuesta

14

Sus llamadas router.route están funcionando, esas llamadas no son su problema. Cuando llama al route para agregar una nueva ruta, la nueva ruta se encuentra al final de la lista de enrutamiento. En particular, las rutas que son agregadas por sus llamadas route van después de '*other' y '*other' coincidirán con cualquier cosa para que sus nuevas rutas sean efectivamente ignoradas.

Prueba a eliminar su ruta '*other' de routes y añadiendo que después de sus dos route() llamadas:

routes : { 
    ''  : 'showDashboard' // Not shown 
}, 

router.route(ExposeTranslation.get('customers.new.route'), 'newCustomer'); 
router.route('/test/me/again', 'testAgainRoute'); 
router.route('*other', 'showModalError'); 

Las rutas no se almacenan en App.Router objeto, they're stored inside Backbone.history:

route: function(route, name, callback) { 
    // ... 
    Backbone.history.route(route, _.bind(function(fragment) { 
    //... 
    }, this)); 
    return this; 
}, 

Es por eso que su console.log(App.Router) no dice nada útil.

Cuestiones relacionadas