Как передать строку запроса в backbone.js routing
Я использую Backbone.js и jQuery-mobile. jQuery-мобильная маршрутизация отключена, и я использую lib только для пользовательского интерфейса. У меня все работает, кроме выбора перехода на страницу. Мне нужно передать переход страницы ( "slice-up", "fade", "slide-down" ) на маршрутизатор Backbone, потому что переход изменяется в зависимости от того, откуда приходит пользователь.
Я понял очень уродливый способ сделать это, чтобы передать их через URL:
class App.Routers.Foods extends Backbone.Router
routes:
'': 'index'
':transition': 'index'
'foods/new': 'new'
'foods/new/:transition': 'new'
initialize: ->
@collection = new App.Collections.Foods()
@collection.fetch()
index: (transition)->
view = new App.Views.FoodIndex(collection: @collection)
App.changePage(view, transition)
new: (transition)->
view = new App.Views.FoodNew(collection: @collection)
App.changePage(view, transition)
Вот ссылка html для перехода по умолчанию:
<a href="#" data-icon="back" class="ui-btn-left">Back</a>
Вот ссылка html для перехода fade:
<a href="#fade" data-icon="back" class="ui-btn-left">Back</a>
Использование строки запроса, т.е. /food/new? transition = 'fade', определенно лучше, но я не знаю, как определить магистральную маршрутизацию для использования переменных строки запроса.
Как мне это сделать?
Есть ли более элегантный способ справиться с моей проблемой, т.е. передать переменную, не используя URL-адрес вообще?
Ответы
Ответ 1
Вам придется вручную проанализировать параметр URL-адреса внутри функций маршрутизатора.
class App.Routers.Foods extends Backbone.Router
routes:
'': 'index'
'foods/new': 'new'
initialize: ->
@collection = new App.Collections.Foods()
@collection.fetch()
index: ()->
view = new App.Views.FoodIndex(collection: @collection)
App.changePage(view, getQueryVariable('transition'))
new: ()->
view = new App.Views.FoodNew(collection: @collection)
App.changePage(view, getQueryVariable('transition'))
Функция JS для анализа параметров запроса.
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return unescape(pair[1]);
}
}
return false;
}
Вам, конечно, придется преобразовать JS-функцию в CS, но вы получите эту идею.