Как я могу передать строку запроса в маршрутизацию backbone.js - PullRequest
15 голосов
/ 01 апреля 2012

Я использую Backbone.js и jQuery-mobile.jQuery-мобильная маршрутизация отключена, и я использую lib только для пользовательского интерфейса.У меня все работает, кроме выбора перехода страницы.Мне нужно передать переход страницы («slice-up», «fade», «slide-down») на магистральный маршрутизатор, потому что переход меняется в зависимости от того, откуда пришел пользователь.

Я понялочень уродливый способ сделать это, передать их через 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 для перехода исчезновения:

<a href="#fade" data-icon="back" class="ui-btn-left">Back</a>

Использование строки запроса, например, / food / new? Transition = 'fade' определенно лучше, но я не знаю, как определить магистральную маршрутизацию для использования переменных строки запроса.

Как мне это сделать?

Есть ли более элегантный способ справиться с моей проблемой, то есть передать переменную, вообще не используя url?

1 Ответ

12 голосов
/ 02 апреля 2012

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

...