2012-04-14 30 views
10

Tôi gặp sự cố sau. Một số phần của ứng dụng Backbone của tôi có url như:Backbone.js và băm hàng đầu

site.ru/#profile 

Khi trang web được tải thay đổi URL để:

site.ru/profile 

Vì vậy, các hash đã bị mất. Vì vậy, tôi thấy vấn đề trong chức năng điều hướng của Backbone:

var routeStripper = /^[#\/]/; 
... 
var frag = (fragment || '').replace(routeStripper, ''); 

Khi tôi hiểu mã này làm sạch băm ở đầu URL.

Có đúng cách để chỉ xóa dòng mã này để khắc phục sự cố không? Bạn có thể tư vấn cho tôi một số cách khác để sửa lỗi này không.

TIA!

Trả lời

12

Xương sống chỉ loại bỏ băm nếu bạn bật pushState.

Thay đổi Backbone.history.start({pushState: true}); để Backbone.history.start();

http://backbonejs.org/#Router

+0

có, tôi sử dụng pushState = true. Nếu tôi loại bỏ pushState những gì tôi mất? – dizpers

+0

Tất cả điều khiển pushState là nếu sử dụng URL dựa trên băm hoặc không phải trên các trình duyệt hỗ trợ API lịch sử. – abraham

0

vẻ Backbone.js đang sử dụng / & # như delimiters, để kéo ra địa chỉ gốc & thư mục con. Bộ lọc / cần tp stau tp nhận được "đoạn". Cố gắng chỉ xóa # trong RegEx đó, nhưng để phần còn lại của dòng ở đó. (& để lại nhận xét trong mã mà bạn đã làm như vậy! :)

Tôi cũng sẽ gửi báo cáo lỗi vì nó đang gửi lại liên kết mà không có băm.

+0

BTW, bạn nên gắn thẻ JavaScript này cũng & có thể RegEx. – tomByrer

+3

Bạn có thể sử dụng Backbone.history.start ({pushState: true, hashChange: false}); để giữ pushState và vẫn sử dụng băm – TYRONEMICHAEL

0

Có cùng một vấn đề, và một số người khác với chúng tôi ;-) (xem GitHub issue)

Tôi đã khắc phục này ngay bây giờ bằng cách không nghe băm thay đổi, như vậy:

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

Điều này có vẻ phù hợp với tôi.

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