ссылка на другой контроллер с горячим полотенцем и дюрандалем

Я разрабатываю приложение mvc4 с несколькими спа.

Я использую шаблон горячего полотенца для своего спа.

Что я хочу сделать, так это иметь якорную ссылку в моих представлениях для спа, чтобы перейти к действию индекса для другого контроллера, чтобы мои пользователи могли выйти из одного спа и открыть другой. Не все действия запустят спа, некоторые из них являются обычными страницами в стиле mvc.

Я разместил код, подобный следующему, на моих html-страницах спа:

<a href="/controller/action">Navigate to another controller</a>

Это изменит URL-адрес в браузере, но всегда перезагрузит HTML-страницу по умолчанию для спа. Если я нажму кнопку обновления в браузере, то перейду на нужную страницу.

Я смог поместить цель в тег привязки _parent или _top, например:

 <a href="/controller/action" target="_parent">Navigate to another controller</a>

и он перейдет на новую страницу контроллера.

Я считаю, что это что-то в инфраструктуре Durandal, которая мешает спа-центру перейти ко второму контроллеру, но, поскольку я только начинаю работать с этим, я в тупике, что мне нужно изменить. Я думаю, что должен быть лучший способ, чем использование цели в теге привязки, или это лучший вариант.


person mike    schedule 31.03.2013    source источник
comment
Является ли сайт MVC с несколькими SPA больше не SPA, а скорее приложением MVC? вы не просто пытаетесь сделать машину с квадратными колесами?   -  person davethecoder    schedule 01.04.2013
comment
Я снял стартовый набор durandal и добавил якорные ссылки на страницу welcome.html, используя в качестве цели _parent и _top, и навигация у меня работала нормально. Не могли бы вы предоставить весь код?   -  person Evan Larsen    schedule 01.04.2013
comment
Эван, когда я добавляю _parent или _top, у меня тоже работает навигация. Возможно, я не совсем ясно выразился в своем вопросе, есть ли лучший способ справиться с этой ситуацией, чем использовать цель как _parent или _top.   -  person mike    schedule 01.04.2013
comment
@davethecoder Приложение для конечного пользователя и интерфейс управления для него может иметь смысл создавать как два отдельных интерфейса, не так ли?   -  person Timothy Lee Russell    schedule 04.04.2013


Ответы (1)


Надеюсь, что я вас правильно понял. Я считаю, что это поведение вызвано моим Sammy.js (на котором в настоящее время основан маршрутизатор Durandal). По умолчанию Sammy перехватывает все ссылки и обрабатывает их в отношении самого SPA.

Мне не понравилось такое поведение веб-сайта, над которым я работаю, и мне нужны были ссылки на другие веб-страницы MVC, которые можно было бы получить из SPA. Чего я действительно хотел, так это того, чтобы обычные ссылки просто работали, а хэш-ссылки интерпретировались как ссылки на другое представление в SPA. Таким образом, «/controller/action» перейдет на другую веб-страницу, а «#moduleId» перейдет на другую виртуальную машину Durandal.

Я нашел эту опцию Sammy, которая работает для меня, и установил ее в свой main.js.

    // This stops Sammy from hijacking regular links
    Sammy.Application.prototype.disable_push_state = true;
person Alexander Preston    schedule 01.04.2013
comment
Именно то, что мне было нужно. Спасибо. - person mike; 03.04.2013