2013-05-16 2 views
3

У меня есть приложение SPA, использующее DurandalJS, которое отлично работает. Ссылки маршрутизируются, модели просмотра активируются и т. Д.Игнорировать якорь в приложении DurandalJS

Проблема в том, что у меня есть привязка, указывающая на страницу, которая на самом деле живет на сервере. Мне нужно, чтобы браузер действительно запрашивал эту страницу (это страница MVC asp.net).

Кажется, маршрутизатор в Durandal подключается ко всем ссылкам, которые являются относительными (или в том же домене, действительно), и если он не находит маршрут, вызывает метод handleInvalidRoute маршрутизатора.

Я не могу на всю жизнь понять, как сообщить Дюрандалю, что он не перенаправляет этот URL. Мне нужно также поддерживать функции middle/ctrl + click.

Документация не помогает, и google ничего не обнаружил. Я также попытался изучить код маршрутизатора/SammyJs, но я не мог видеть ничего очевидного.

This question похоже на мое, но ответ не работает для меня. Мои URL-адреса - это все фактические URL-адреса (не хэш-префикс), поэтому я не могу отключить PushState.

ответ

3

Самый простой способ я нашел до сих пор было создать абсолютный URL (например, http://myapp.com/whatever-that-is-not-a-sammy-route) и добавить

target="_top" 

на якорь. Это позволяет использовать новое поведение вкладки (Ctrl + клик, средний клик, открыть новое контекстное меню вкладки), и когда ссылка остается нажатой, она открывается в текущем окне, минуя прокрутку Sammy!

1

Не уверен, что это поможет, но я создал привязку кликов, которая называется location.assign. Я использовал PHP, но он все равно должен работать для вас. Вот пример:

В View

<a data-bind="click: goToMyLink">Go</a> 

В ViewModel

goToMyLink: function() { 
    location.assign('myLink.php'): 
} 
+0

Этот вид работ, но в Chrome, средний клик также вызывает событие click, и новая вкладка не открывается. –