2011-08-14 36 views
7

Tôi đang sử dụng plugin jQuery BBQ để đẩy trạng thái đến vị trí.hash.Cập nhật hàm băm theo lập trình mà không kích hoạt sự kiện hashchange?

Để ngăn vòng lặp phản hồi, tôi muốn vô hiệu hóa trình lắng nghe hashchange tạm thời trong khi đặt trạng thái theo chương trình.

Tôi đã nhìn thấy giải pháp này: Change hash without triggering a hashchange event

Thật không may, nó dường như không được hoàn toàn mạnh mẽ vì nó đôi khi gây nên mặc dù tôi làm điều này:

updateURL(obj){ 
    $(window).unbind('hashchange'); 
    $.bbq.pushState(obj); 
    setTimeout(function() { bindHashChange()}, 500); 
} 

Có bây giờ là một cách tiếp cận tốt hơn để đẩy các trạng thái theo chương trình? Có lẽ một thư viện JS khác?

Trả lời

2

Thực hiện việc này với thời gian chờ sẽ không hoạt động đáng tin cậy. Phần quan trọng của câu trả lời được liên kết là thiết lập một lá cờ mà trình xử lý của bạn biết. Xem câu hỏi cập nhật cho mã.

Ngoài ra, ràng buộc một handler tạm thời để sự kiện đó là chịu trách nhiệm về reestablishing xử lý của bạn:

function updateState(state, handler) { 
    var win = $(window); 

    function temporaryHandler() { 
     win.unbind('hashchange', temporaryHandler); 
     win.bind('hashchange', handler); 
    }; 

    win.unbind('hashchange', handler); 
    win.bind('hashchange', temporaryHandler); 

    $.bbq.pushState(state); 
} 
Các vấn đề liên quan