2012-03-07 60 views
9

Đây là application-router.js tập tin của tôi, nơi tôi đang tạo Backbone.Router đối tượng chỉ với chỉ vài tuyến đường:Lập trình thêm tuyến đường vào Backbone.Router?

var App = App || {}; 

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

Trong chính tập tin javascript application.js tôi muốn lập trình thêm các tuyến đường. Tôi đã thử với chức năng route() và nó không hoạt động, các tuyến đường không được thêm vào. Tuy nhiên nó hoạt động thông qua một đối tượng để các "nhà xây dựng", nhưng điều đó sẽ ghi đè lên các tuyến đường đã được xác định:

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

Trong thực tế console.log(App.Router) show:

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

Tôi cho rằng tôi đang thiếu một cái gì đó tôi không thể hình dung ra, tôi bắt đầu học phần nhỏ này của javascript mạnh mẽ.

Trả lời

14

Gọi router.route của bạn đang hoạt động, những cuộc gọi đó không phải là vấn đề của bạn. Khi bạn gọi route để thêm tuyến mới, tuyến mới sẽ nằm ở cuối danh sách định tuyến. Cụ thể, các tuyến đường được thêm vào bởi các cuộc gọi route của bạn sau '*other''*other' sẽ khớp với bất kỳ thứ gì để tuyến đường mới của bạn sẽ bị bỏ qua hiệu quả.

Hãy thử tháo đường '*other' của bạn từ routes và thêm nó sau hai route() bạn gọi:

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

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

Các tuyến đường không được lưu trữ trong App.Router đối tượng, they're stored inside Backbone.history:

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

Đó là lý do console.log(App.Router) của bạn không nói bất cứ điều gì hữu ích.

Các vấn đề liên quan