Tôi đang sử dụng history.js để xử lý nút quay lại. Trong stat.js của history.js được kích hoạt bất cứ khi nào tôi thực hiện pushstate. Tại sao? hành viStatechange kích hoạt bất cứ khi nào tôi thực hiện trạng thái đẩy
Trả lời
Theo discussion on github này, nó mong đợi của history.js
này pull request tuyên bố đã biến đổi history.js là inline hơn với W3C Specs.
Muốn thêm, có, đây là hành vi mong đợi của History.js. Đồng thời có more discussions phê phán hành vi này vì nó không phải là tiêu chuẩn W3C và gây nhầm lẫn.
Tóm lại, để trả lời câu hỏi của bạn: Trong chức năng History.js pushState()
là một cuộc gọi đến statechange ở cuối.
Upside của giải pháp này là bạn chỉ có thể thay đổi (đẩy) trạng thái mới của mình và để hàm onstatechange() xử lý việc chuyển đổi. Downside là bạn không thể xử lý các ngoại lệ/hoặc phải ghi chúng vào bộ xử lý sự kiện onstatechange.
Cá nhân tôi thích cách xử lý W3C này, vì bạn có thể phân biệt giữa nút quay lại/tiến và pushState. Các History.js bảo trì đang làm việc trên một giải pháp cờ nội bộ, cho phép bạn thay đổi hành vi này:
Thông báo như thế nào các cuộc gọi trên [pushstate-cuộc gọi] sự kiện kích hoạt statechange, nếu vì một lý do bạn không muốn điều này xảy ra thì bên trong handler statechange của bạn, bạn có thể sử dụng như sau:
if (History.getState().internal) { return; }
* tính năng này hiện đang được phát triển và chỉ có thể được sử dụng với phiên bản 'dev' của History.js! Hy vọng điều này sẽ giúp một số người khác trong tương lai :)
Sau khi cố gắng thực hiện điều này cho một ngày bây giờ, cuối cùng tôi đã tìm thấy giải pháp ở đây: https://github.com/browserstate/history.js/issues/47#issuecomment-25750285
Mã này là khá đơn giản chết tiệt, sau đây được trích dẫn từ liên kết:
Khi bạn đẩy trạng thái của bạn
History.pushState({
_index: History.getCurrentIndex(),
someData: ...
}, someTitle, someUrl);
và sau đó trong sự kiện ràng buộc
History.Adapter.bind(window, 'statechange', function() {
var currentIndex = History.getCurrentIndex();
var internal = (History.getState().data._index == (currentIndex - 1));
if (!internal) {
// your action
}
});
- 1. Làm cách nào để thay đổi trạng thái mà không kích hoạt statechange trong history.js?
- 2. Mã trạng thái vỏ trong thực hiện
- 3. Xác định trạng thái kích hoạt trạng thái thạch anh bị tạm dừng?
- 4. Trạng thái kích hoạt liên kết của nút trong Ember.js
- 5. Trạng thái đẩy lịch sử IE
- 6. Kích hoạt bản âm thanh HTML5 để phát bất cứ khi nào nó đã tải
- 7. Angularjs kích hoạt phụ thuộc trạng thái quốc gia
- 8. Tại sao ColorAnimation cho trạng thái được kiểm tra không bền màu sau khi trạng thái MouseOver được kích hoạt?
- 9. Bật loa ngoài bất cứ khi nào cuộc gọi đi được thực hiện
- 10. Tôi làm cách nào để phát hiện bất cứ khi nào hai UIImageView trùng lặp?
- 11. Trình phát phim có trạng thái kích hoạt sai (1)
- 12. std :: Trạng thái thực hiện put_time trong GCC?
- 13. Xcode nói "Thay đổi không được cam kết" Bất cứ khi nào tôi cố gắng git kéo hoặc đẩy
- 14. phát hiện trạng thái không hoạt động silverlight 4 application
- 15. Android: Xoay hoạt hình trở lại trạng thái thực sau khi hoàn thành hoạt ảnh?
- 16. Khi nào tôi nên kích hoạt/hủy kích hoạt múi giờ hiện tại ở Django (1.4)?
- 17. Làm cách nào để thực hiện điều gì đó khi trạng thái thay đổi hộp kiểm?
- 18. Mã trạng thái HTTP nào cho tài khoản không được kích hoạt?
- 19. Xác thực đa trạng thái trong Rails
- 20. Trạng thái PNG hoạt ảnh
- 21. Làm thế nào để kích hoạt một Jenkins xây dựng khi đẩy được thực hiện cho một kho github tin
- 22. Bất cứ điều gì sau khi DOS FOR/F vòng lặp không thực hiện
- 23. Android phát hiện trạng thái cảm ứng từ bất kỳ ứng dụng nào
- 24. Trạng thái hiện diện của Communicator Office hoạt động như thế nào?
- 25. Làm cách nào để tôi có thể kích hoạt TMUX bất cứ khi nào tôi bắt đầu một phiên trình bao mới?
- 26. Khi nào sử dụng bean phiên trạng thái trên bean phiên không trạng thái?
- 27. Bất cứ ai có thể giải thích tại sao "trạng thái git" cho thấy các tập tin như modfied khi chạy theo một chia sẻ trên Linux?
- 28. .gitignore hiển thị khi tôi chạy trạng thái git
- 29. Tại sao không đặt MenuItem.InputGestureText khiến MenuItem kích hoạt khi tôi thực hiện thao tác nhập?
- 30. Phát hiện trạng thái nguồn USB
Triệu cảm ơn. Cá nhân tôi cảm thấy giải pháp history.js là tốt hơn. – aWebDeveloper