Простой Backbone.js Маршрутизатор?(иерархия страниц + строка запроса) - PullRequest
1 голос
/ 21 ноября 2011

Как настроить магистральный маршрутизатор, который может обрабатывать URL-адреса, такие как:

example.com/#!/story-1/?a=1&b=2

или предпочтительно с поддержкой URL-адреса подстраницы:

example.com/#!/chapter-1/story-1/?a=1&b=2

Мне нужен простой способ определения страниц со связанной строкой запроса.

Это поддерживается по умолчанию или я должен использовать это или другое дополнение? https://github.com/documentcloud/backbone/pull/668

Конечный результат должен выглядеть примерно так:

  1. Запрошенный ресурс:
    example.com/#!/chapter-1/story-1/?a=1&b=2

  2. Разобрать и посмотреть, соответствует ли объект page in pages:
    страницы: { chapter-1_story-1: { шаблон: # шаблон1 } }

  3. Загрузка шаблона страницы и контроллеров страниц с помощью строки запроса:
    PageController.load (шаблон, параметры)

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

@ jhudson8 из запроса на получение # 668 создает плагин backbone-query-parameters .

Это очень просто, просто скопируйте backbone.queryparams.jsв вашу среду и включите после backbone.js.

1 голос
/ 21 ноября 2011

Из документов:

For example, a route of "search/:query/p:page" will match a fragment of 
#search/obama/p2, passing "obama" and "2" to the action. A route of 
"file/*path" will match #file/nested/folder/file.txt, passing 
"nested/folder/file.txt" to the action.

Поэтому вы можете использовать такие переменные, как:

 routes:{
   'search/:query/:page': 'handlePages'
 }

или такие пути:

 routes:{
   'search/*path': 'handlePages'
 }

Яоднако не известно ни о какой обработке строки запроса.

0 голосов
/ 22 ноября 2011

Вам может понадобиться нарисовать другой маршрут, который также включает в себя '?' и восклицательный знак для псевдо-URL-параметров. Например, это функция, с помощью которой вы можете расширить Router, которая будет проходить через ваш маршрутный объект и рисовать дополнительный маршрут для каждого со строкой запроса. Он также проанализирует параметры URL и передаст их в качестве последнего аргумента методу маршрута.

mapRoutesWithParams: function() {
  _.each(_.keys(this.routes), function(route) {
    this.route(route+'?*params', // draw the route with a query string
      this.routes[route],
      function() {
        var args = _.toArray(arguments);
        var params = args.pop();
        var paramsObject = _(params.split('&')).reduce(function(memo, pair) {
          memo[pair.split('=')[0]] = pair.split('=')[1]; return memo;
        }, {});
        return this[this.routes[route]].apply(this, args.concat(paramsObject));
      }
    );
  }, this);
}
...