Возможно ли с помощью backbone создать маршрут, соответствующий всем URL-адресам, начинающимся с чего-то? - PullRequest
2 голосов
/ 06 января 2012

Я пытаюсь создать маршрут с backbone.js, который соответствует '/ object /: id'

Проблема в том, что я могу получить параметры получения, содержащие все, включая косые черты, тогда магистраль не распознает этот URL: / object / 1337? Var = / hey

Могу ли я игнорировать параметры получения или просто сказать, что я хочу, чтобы мой маршрут начинался с '/ object /: id?'

Спасибо.

Ответы [ 4 ]

4 голосов
/ 06 января 2012

Наконец-то нашел решение, возможно, немного некрасиво

initialize : function() {
  this.route(/^object\/([^\?]*)\?/, "show", this.show);
}
3 голосов
/ 06 января 2012

Я считаю, что это сработает для вас:

/ объект /: идентификатор / * знак '

Ваш параметр 'id' будет по-прежнему соответствовать вашему идентификатору, а 'splat' в конце будет совпадать со всем, что добавлено в конце. Это даже не будет ничего соответствовать. Так что если вы хотите запустить этот маршрут без каких-либо параметров, тогда будет работать / object / 1337 /. Обратите внимание на косую черту в конце. Это должно быть там.

Ваша исходная ссылка / object / 1337? Var = / hey также должна запускать этот маршрут.

РЕДАКТИРОВАТЬ: о сплатах можно прочитать на

http://documentcloud.github.com/backbone/#Router-routes

РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: Ваша исходная ссылка будет работать с новой косой чертой между вашим идентификатором и '?'

/ объект / 1337 /? Вар = / эй

0 голосов
/ 25 июля 2013

Если все, что вам нужно, это отделить параметры от фрагмента, я предлагаю использовать backbone-query-params .

Вы можете использовать общие маршруты Backbone, и плагин будет анализировать параметры GET в объекте, который затем передается в функцию-обработчик маршрута.

Со страницы Github плагина:

routes: {
    'object/:id': 'myRoute'
}
...
myRoute: function(id, params) {

    // if the routed url is '/object/1337?var=/hey'
    console.log( id );     // ---> '1337'
    console.log( param );  // ---> { var : '/hey' }

}
0 голосов
/ 20 ноября 2012

Для этого я использую следующее:

// Call for Backbone to make the route regexp
var route = Backbone.Router._routeToRegExp(route_string);
// Change the regexp to ignore GET parameters
route = new RegExp(route.source.replace(/\$/, "\\\/?(?:(\\\?.*$))*$");
// Create a route with a new regexp
// Backbone will not try to make a regexp from the route argument if it's already a RegExp object
this.route(route, name, callback);
...