Как передать строку запроса в 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, но вы получите эту идею.