2012-01-29 35 views
7

Có cách nào để kết hợp các số bămkhông băm URL trong ứng dụng Backbone.js không?Kết hợp các URL băm và không băm trong Backbone.js

Tôi đặt Backbone.history.start({pushState: true}). Khi người dùng nhấp vào một số liên kết, tôi lấy dữ liệu JSON từ máy chủ, trang cập nhật và gọi Backbone.history.navigate để thay đổi URL trong trình duyệt từ (ví dụ: từ example.com/zlinsky/kampan/mf/ thành example.com/moravskoslezsky/kampan/mf/).
Nếu người dùng sao chép URL từ trình duyệt và mở trong tab thứ hai, anh ta sẽ thấy cùng một trang (vì vậy mọi trang được cập nhật theo cách này đều có trang tương ứng trên máy chủ). Đây chính là điều tôi muốn.

Nhưng giờ tôi gặp sự cố ...

Tôi cũng có một số <select> trên trang. Khi người dùng thay đổi giá trị trong chúng, tôi thực hiện một số thay đổi động trên trang (mà không tìm nạp JSON từ máy chủ, cập nhật chỉ được thực hiện ở phía máy khách). Tôi muốn thay đổi URL theo số <select>, ví dụ: example.com/moravskoslezsky/kampan/mf/#state1 (vì vậy, khi ai đó gửi URL này, phía bên kia sẽ thấy cùng một trang, trong cùng trạng thái với người gửi).

Tôi không thể tìm được cách, cách thực hiện trong Backbone.js. Nếu tôi đặt pushState: true trên Backbone.history, Router bỏ qua thẻ băm.
Nếu tôi đặt pushState: false, tôi không thể đặt các URL như tôi mô tả trong đoạn đầu tiên ở trên.

Cảm ơn bạn đã gợi ý.

+0

là bạn có thể giải quyết vấn đề này? Tôi đang đối mặt chính xác cùng một vấn đề. khi pushState là đúng, tôi không thể định tuyến url chứa phần băm; băm chỉ hoàn toàn bị bỏ qua. – Fedor

Trả lời

2

Bạn có thể gọi: Backbone.history.navigate("/foo/bar#fragment")

Nhưng tôi không nghĩ rằng đó là một ý tưởng tốt, vì tức là không hỗ trợ pushstate, vì vậy xương sống sẽ sử dụng băm nổ url (trong ví dụ).

Có lẽ bạn có thể sử dụng querystrings: Backbone.history.navigate("/foo/bar?foo=bar", true) mà sẽ là trong các trình duyệt hiện đại: http://domain.tld/foo/bar?foo=bar và trong ví dụ: http://domain.tld#/foo/bar?foo=bar