Если я разрешаю pushState в базовом маршрутизаторе, мне нужно использовать return false во всех ссылках или делать это автоматически? Есть ли какие-либо образцы, как часть html, так и часть скрипта.Backbone.js и pushState
ответ
Это картина Тима Branyen использует в своей boilerplate:
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);
}
});
}
Используя это, а не по отдельности делать preventDefault на ссылки, вы позволяете маршрутизатор обрабатывать их по умолчанию и делать исключения при наличии атрибута data-bypass
. По моему опыту он хорошо работает как образец. Я не знаю каких-либо замечательных примеров, но попробовать себя не должно быть слишком сложно. красота магистральная заключается в ее простоте;)
$(document.body).on('click', 'a', function(e){
e.preventDefault();
Backbone.history.navigate(e.currentTarget.pathname, {trigger: true});
});
match()
или startsWith()
(ES 6) также может быть использована для проверки протокола. Если вы хотите поддерживать абсолютные URL-адреса по свойству pathname
, проверьте базовые URL-адреса на 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();
}
}
Вы можете предотвратить поведение по умолчанию нажмите на <a>
тегов в HTML. Просто добавьте ниже код внутри тега <script />
.
<script>
$(document).on("click", "a", function(e)
{
e.preventDefault();
var href = $(e.currentTarget).attr('href');
router.navigate(href, true);router
});
</script>
- 1. Backbone.js PushState True
- 2. pushState in backbone.js
- 3. Как использовать PushState маршрутизаторы в Backbone.js
- 4. Закладка и перезагрузка страницы с помощью Backbone.js и pushState
- 5. pushState предотвращает маршруты Backbone.js от работы
- 6. Symfony2, Магистральная и PushState
- 7. Backbone.js и mod rewrite
- 8. Является ли pushState в Backbone.js правильной вещью для этого?
- 9. Backbone.js Pushstate: истина, не возвращающая функцию обратного вызова
- 10. Backbone.js И Push State
- 11. BackboneJS - pushState и изображения
- 12. магистральные маршруты и PushState
- 13. AppCache и pushState
- 14. Ember.js аутентификация, pushstate и routing
- 15. history pushState и позиция прокрутки
- 16. Backbone PushState и ошибка 404
- 17. Перезапись nginx для pushState-URL's
- 18. Пути Backbone.js не запускаются
- 19. replaceState() vs pushState()
- 20. Может использовать pushState
- 21. Нужен совет по PushState и onpopstate
- 22. HTML5 pushstate и заменить состояние перезагрузки
- 23. Поддерживает ли Internet Explorer pushState и replaceState?
- 24. Добавление pushState() и popstate в мой проект
- 25. HTML 5 - Ajax popstate и pushstate
- 26. Симуляция кадров с JQuery нагрузки() и PushState()
- 27. Магистральный маршрутизатор, pushstate и относительные URL-адреса
- 28. pushState() и popState(): манипулирование историей браузеров
- 29. хеширования и PushState в JQuery AJAX
- 30. Как правильно использовать PushState, replaceState и popState?
Удивительный, он отлично работает. Благодаря! – Marcus
Просто голова - я заметил, что IE7 вернул абсолютный URL-адрес в некоторых случаях, когда ожидал относительный URL-адрес. Чтобы обработать этот случай, вы хотите нормализовать значение 'href' как относительного пути до вызова навигации. – lupefiasco
Просто любопытно, что такое (href.slice (протокол.length)! == протокол)? – dezman