Nếu tôi bật pushState trong bộ định tuyến đường trục, tôi có cần phải sử dụng return false trên tất cả các liên kết hay không xử lý trục chính tự động này? Có mẫu nào không, cả phần html và phần kịch bản.Backbone.js và pushState
Trả lời
Đây là mô hình Tim Branyen sử dụng trong boilerplate mình:
initializeRouter: function() {
Backbone.history.start({ pushState: true });
$(document).on('click', 'a:not([data-bypass])', function (evt) {
var href = $(this).attr('href');
var protocol = this.protocol + '//';
if (href.slice(protocol.length) !== protocol) {
evt.preventDefault();
app.router.navigate(href, true);
}
});
}
Sử dụng điều đó, chứ không phải là cá nhân làm preventDefault trên các liên kết, bạn hãy router xử lý chúng theo mặc định và có những ngoại lệ bằng việc có một thuộc tính data-bypass
. Theo kinh nghiệm của tôi, nó hoạt động tốt như một khuôn mẫu. Tôi không biết về bất kỳ ví dụ tuyệt vời nào xung quanh, nhưng việc thử nó không phải là quá khó. vẻ đẹp Backbone của nằm trong sự đơn giản của nó;)
$(document.body).on('click', 'a', function(e){
e.preventDefault();
Backbone.history.navigate(e.currentTarget.pathname, {trigger: true});
});
match()
hoặc startsWith()
(ES 6) cũng có thể được sử dụng để kiểm tra giao thức. Nếu bạn muốn hỗ trợ url tuyệt đối theo thuộc tính pathname
, hãy kiểm tra url cơ sở theo location.origin
.
function(evt) {
var target = evt.currentTarget;
var href = target.getAttribute('href');
if (!href.match(/^https?:\/\//)) {
Backbone.history.navigate(href, true);
evt.preventDefault();
}
// or
var protocol = target.protocol;
if (!href.startsWith(protocol)) {
// ...
}
// or
// http://stackoverflow.com/a/25495161/531320
if (!window.location.origin) {
window.location.origin = window.location.protocol
+ "//" + window.location.hostname
+ (window.location.port ? ':' + window.location.port: '');
}
var absolute_url = target.href;
var base_url = location.origin;
var pathname = target.pathname;
if (absolute_url.startsWith(base_url)) {
Backbone.history.navigate(pathname, true);
evt.preventDefault();
}
}
Bạn có thể ngăn chặn hành vi mặc định khi nhấp vào <a>
thẻ bằng html. Chỉ cần thêm mã bên dưới vào trong thẻ <script />
.
<script>
$(document).on("click", "a", function(e)
{
e.preventDefault();
var href = $(e.currentTarget).attr('href');
router.navigate(href, true);router
});
</script>
- 1. pushstate không hoạt động chính xác trong backbone.js
- 2. Backbone.js và mod viết lại
- 3. Kết hợp các URL băm và không băm trong Backbone.js
- 4. replaceState() vs pushState()
- 5. pushState trong Android 4.0
- 6. Viết lại nginx cho pushState-URL
- 7. Jinja2, Backbone.js và tăng cường tiến bộ
- 8. JSONP và Backbone.js
- 9. Sử dụng lại các khung nhìn/tuyến đường trên máy chủ khi sử dụng pushstate Backbone.js cho seo/đánh dấu
- 10. Có thể sử dụng pushState
- 11. Lỗi Ajax + pushState trong Chrome
- 12. pushState() và popState(): thao tác lịch sử của trình duyệt
- 13. HTML5/jQuery: pushState và popState - liên kết sâu?
- 14. Rails phân khối và Backbone.js
- 15. Backbone.js và băm hàng đầu
- 16. Sử dụng HATEOAS và Backbone.js
- 17. sự kiện backbone.js và el
- 18. Backbone.js PushStates: Dự phòng Internet Explorer không hoạt động
- 19. Backbone Router không làm việc với pushState
- 20. Javascript khuôn khổ cho pushstate "hijax"
- 21. Sử dụng HTML5 pushstate trên angular.js
- 22. ghi đè $ location pushState history AngularJS
- 23. Kết hợp d3.js và backbone.js
- 24. Sử dụng Node.js với Django và Backbone.js
- 25. jQTouch và Backbone.js Định tuyến/Lượt xem
- 26. Backbone.js và api REST với silex (PHP)
- 27. backbone.js và tập lệnh tên miền chéo
- 28. Backbone.js và hệ thống phân cấp/cây
- 29. Backbone.js và xác thực người dùng
- 30. Django URL conf và Backbone.js Router
Tuyệt vời, nó hoạt động tuyệt vời. Cảm ơn! – Marcus
Chỉ cần một người đứng đầu lên - Tôi nhận thấy rằng IE7 trả lại URL tuyệt đối trong một số trường hợp mà tôi đã mong đợi URL tương đối. Để xử lý trường hợp này, bạn sẽ muốn bình thường hóa giá trị của 'href' thành một đường dẫn tương đối trước khi gọi điều hướng. – lupefiasco
Chỉ cần tò mò, giao thức (href.slice (protocol.length)! ==) là gì? – dezman