2012-08-22 24 views
5

Tôi có ứng dụng đang hoạt động bằng cách sử dụng Backbone 0.5.3, không còn hoạt động khi sử dụng xương sống 0.9.2.Đường trục chính không được gọi là

Tôi đã xác định rằng Router.navigate() không gọi tuyến đường của tôi vì một số lý do.

Đây là Router của tôi:

var Router = Backbone.Router.extend({ 
    routes: { 
     '/mypage': 'mypage', 
    }, 

    mypage: function() { 
     // show page ... 
    } 
}); 

Calling con đường bằng tay như vậy hoạt động tốt:

Router.mypage() 

Tôi cũng đã cố gắng để ghi đè phương pháp .navigate xương sống để gỡ lỗi ứng dụng của tôi ...

var Router = Backbone.Router.extend({ 
    routes: { 
     '/mypage': 'mypage', 
    }, 

    navigate: function(fragment, options) { 
     console.log("navigate called"); 
     Backbone.history.navigate(fragment, options); 
    }, 

    mypage: function() { 
     // show page ... 
    } 
}); 

... có vẻ như .navigate được gọi nhưng ...

Backbone.history.navigate(fragment, options); 

... chỉ không gọi tuyến đường.

Tôi đang sử dụng pushState, đây là cuộc gọi ban đầu của tôi:

Backbone.history.start({ 
    root: '/', 
    pushState: true, 
    silent: true 
}); 

Đã thử nó không có tham số gốc và im lặng - không thành công.

Một lần nữa: Hoạt động này sử dụng Backbone 0.5.3.

Nhờ mọi người để lại câu trả lời!

Achim

Trả lời

2

Từ fine manual:

mở rộngBackbone.Router.extend(properties, [classProperties])

Bắt đầu bằng cách tạo ra một lớp bộ định tuyến tùy chỉnh. [...] Lưu ý rằng bạn sẽ muốn tránh sử dụng một dấu gạch chéo hàng đầu trong định nghĩa tuyến đường của bạn:

Tôi đoán rằng bạn chỉ cần loại bỏ các hàng đầu gạch chéo từ routes của bạn, ví dụ:

routes: { 
    'mypage': 'mypage', 
}, 
+0

Xin chào @mu quá ngắn, cảm ơn bạn, tôi đã kiểm tra điều này rồi. tuyến đường không được tìm thấy có và không có dấu gạch chéo đầu và/hoặc dấu gạch chéo. Gọi App.Router.mypage() hoạt động tốt, vì vậy nó phải là một cái gì đó về phù hợp với tuyến đường. –

+2

Rất tiếc! Bạn nói đúng, chỉ cần kiểm tra lại các tuyến đường của tôi và sửa lỗi này! Btw: Hành vi mới về các dấu gạch chéo hàng đầu trong các tuyến đường được đề cập trong danh sách thay đổi của backbone cho phiên bản 0.9 [http://backbonejs.org/#changelog](http://backbonejs.org/#changelog) –

+0

@Achim: Cảm ơn để kiểm tra các thay đổi. –

0

Bạn phải tạo bản sao của Bộ định tuyến.

var router = new Router(); 
router.navigate(...); 
+0

Hi Sowa, Đây không phải là comple te script, tất nhiên tôi instanciate các Router với 'App.Router = new Router;' Có bỏ qua điều này, ví dụ sẽ không có làm việc trong Backbone 0.5.3 hoặc. –

3

Bạn cần phải thiết lập các tùy chọn kích hoạt cho các phương pháp điều hướng, ví dụ:

Router.navigate("/mypath", {trigger: true})

+0

Xin chào @Erez Rabih, có, tôi đã thử với đúng + sai. Trên giao diện điều khiển ... 'App.Router.navigate; ' ... trả về như sau: ' function (fragment, options) { Backbone.history.navigate (fragment, options); } ' ... trong khi ... ' App.Router.navigate ("/ mypage", {trigger: false}); ' ... trả về" chưa xác định ". –

+0

** Đây không phải là về cách sử dụng Backbone nói chung. ** Ứng dụng của tôi hoạt động tốt bằng xương sống 0.5.3 - phải có một số thay đổi về khớp url trong xương sống 0.9.2 –

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