2012-03-07 2 views
9

Вот мой application-router.js файл, в котором я создаю Backbone.Router объект с помощью всего лишь нескольких маршрутов:Программно добавление маршрутов к Backbone.Router?

var App = App || {}; 

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

В главном файла JavaScript application.js я хотел бы программно добавить маршруты. Я пробовал с функцией route(), и он не работает, маршруты не добавляются. Она работает, однако передача объекта в «конструктор», но это перекроет уже определены маршруты:

// 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'); 

На самом деле console.log(App.Router) шоу:

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

Я предполагаю, что я что-то я не могу без вести выяснить, я начинаю изучать этот маленький кусок мощного javascript.

ответ

14

Ваши router.route звонки работают, эти звонки не являются вашей проблемой. Когда вы вызываете route, чтобы добавить новый маршрут, новый маршрут отправляется в конец списка маршрутизации. В частности, маршруты, которые добавляются по вашим вызовам route, идут после '*other', а '*other' будет соответствовать всем, чтобы ваши новые маршруты были эффективно проигнорированы.

Попробуйте удалить свой '*other' маршрут из routes и добавить его после двух ваших route() звонков:

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

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

Маршруты не хранятся в App.Router объекте, they're stored inside Backbone.history:

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

Вот почему ваш console.log(App.Router) не говорит ничего полезного.

Смежные вопросы