2014-01-28 3 views
3

Я работаю на веб-сайте, где мы используем сторонние веб-службы, чтобы возвращать динамический контент и использовать javascript для разбора и отображения этих данных на странице. Мы уже используем магистраль в нескольких местах на сайте для публикации данных в веб-сервисах, поэтому я подумал о том, чтобы попытаться использовать маршрутизатор Backbone для запуска определенных функций на основе URL-адреса страницы и захвата запроса, потому что мы передаем запросы к url страницы.Магистральная маршрутизация со статическими HTML-файлами

Например: глобальный сайт-search.html # запрос

Это код маршрутизатора я должен к этому моменту:

var Router = Backbone.Router.extend({ 
    routes : { 
     '' : 'indexRoute', 
     'global-site-search.html(:query)' : 'getSearchResults' 
    }, 

    indexRoute: function(query) { 
     console.log("indexRoute"); 
    }, 

    getSearchResults: function(query) { 
     console.log("getSearchResults with query", query); 
    } 
}); 

var WaRouter = new Router(); 

Backbone.history.start({ 
    pushState: true, 
    root: '/' 
}); 

Но когда я попал на страницу с URL, как на общемировом site-search.html # query значение запроса возвращает null. Кто-нибудь пробовал это раньше или я пытаюсь расширить маршрутизатор Backbone до того, чтобы справиться с этим?

ответ

1

ли global-site-search.html с сервера ?, если да, то конфигурация для маршрутизатора должен быть

':query' : 'getSearchResults' 

Если нет, то вы не можете сделать это, потому что Backbone.Router использует hash часть текущего URL страницы для отслеживать страницы. А поскольку global-site-search.html не содержит никакого базового кода, он ничего не может сделать. Это возможно только, если вы каким-то образом может внедрить свой код маршрутизатора в global-site-search.html который является незаконным в этом случае

Обновлено: это позволит вам искать этот маршрут ':query' : 'getSearchResults'

Backbone.history.start({ 
    pushState: true, 
    root: window.location.pathname 
}); 

При использовании маршрутизатора, вам необходимо установите правильный корень, поэтому использование window.location.pathname - самый простой способ сделать это. Кроме того, в соответствии с базовым документом

и если URL-адрес хэша посещен браузером, поддерживающим pushState, он будет прозрачно обновлен до истинного URL-адреса. Обратите внимание, что использование реальных URL-адресов требует, чтобы ваш веб-сервер мог корректно отображать эти страницы, поэтому необходимы и внутренние изменения. Например, если у вас есть маршрут/документов/100`

Поскольку вы не имея какой-либо реальный фоновый для обработки PushState, я предлагаю вам отключить его

+0

глобального МЕСТО-поиск. html с сервера. Я установил маршрутизатор таким образом, потому что будет еще одна страница location-lookup.html, которая делает то же самое только с поиском местоположения. Таким образом, мой план состоял в том, чтобы установить это как маршрут, который приведет к срабатыванию функции, которая получает данные для поиска местоположения, и почему я установил корень в '/'. – user2356346

+0

Проверьте мое обновление. –

+0

Это работает, но он запускает этот маршрут на любом хэшированном URL-адресе, который вызывает проблемы на других страницах. Думаю, мне нужно написать более настраиваемый маршрутизатор, который будет запускаться только на определенных страницах. – user2356346

Смежные вопросы