2012-04-23 30 views
9

Tôi đang viết một ứng dụng bằng backbone.js và đang hoạt ảnh giữa các trang (một chút giống như kiểu ui của iphone). Vì vậy, khi bạn nhấp vào một nút, trang tiếp theo sẽ trượt từ bên phải và nhấp vào nút quay lại sẽ làm cho trang tiếp theo trượt từ bên trái. Tôi muốn có thể làm tương tự với các nút tiến và lùi của trình duyệt, sử dụng Bộ định tuyến. Có thể nói cái nào đã được nhấn, (tiến hoặc lùi) để tôi có thể đảm bảo rằng hình động đang đi đúng hướng?định tuyến đường trục phát hiện xem có chuyển tiếp hoặc quay lại

Chỉ cần làm rõ, tôi không hỏi cách định tuyến xương sống. Tôi hỏi khi thực hiện định tuyến đường trục, cách bạn có thể nắm bắt nút nào khiến url thay đổi, đó có phải là nút quay lại hoặc nút chuyển tiếp không?

Cảm ơn

Trả lời

8

Nghe sự kiện nhấp chuột trên tất cả các liên kết. (CoffeeScript)

$(document).on 'click', 'a' -> 
    window.linkClicked = true 

Hoặc, bạn có thể chặn Backbone.history.navigate(). Nếu ai đó nhấp vào, điều đó có nghĩa là họ sẽ không quay lại, vì vậy hãy đặt cờ thành true. Cũng có một sự kiện trong bộ định tuyến của bạn để nghe tất cả các sự kiện của bộ định tuyến. Luôn lưu trữ đoạn trước (Backbone.history.getFragment()). So sánh đoạn hiện tại với đoạn trước. Nếu chúng giống nhau, hãy kiểm tra xem cờ đó đã được đặt thành true hoặc false hay chưa. Nếu được đặt thành false, thì bạn biết nó đã quay lại, nếu true thì không và ai đó đã nhấp vào liên kết nhưng đã đến cùng trang trước đó. Cuối cùng, đặt lại cờ này thành false.

class SnazzyRouter extends Backbone.Router 
    initialize: -> 
     # This gets triggered everytime a route event gets triggered 
     @on 'all', => 
      currentFragment = Backbone.history.getFragment() 
      window.backDetected = false # assume no back detected 

      if !window.linkClicked and currentFragment == window.previousFragment 
       window.backDetected = true 

      window.linkClicked = false # reset 
      window.previousFragment = currentFragment 

window.linkClicked = false 
window.backDetected = false 
window.previousFragment = null 

snazzyRouter = new SnazzyRouter() 

Bây giờ, đó là một đơn giản

# Did we go back? 
console.log "I CAN'T BELIEVE WE WENT BACK!" if window.backDetected 

Hãy cho tôi biết nếu bạn cần bất kỳ làm rõ (tôi chỉ thực hiện điều này cho ứng dụng của tôi và nó hoạt động).

+0

Tôi không nghĩ rằng điều này thực sự trả lời câu hỏi; anh ta đang tìm kiếm các nút back/forward của trình duyệt. – mix3d

+0

'if! Window.linkClicked and currentFragment == window.previousFragment' mã này sẽ thất bại nếu người dùng nhấp và giữ nút quay lại, chọn một mục nhập _older_. –

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