2016-02-24 2 views
0

У меня есть следующий маршрут в моем Backbone маршрутизаторе:Backbone маршрут _extractParameters захватывая дополнительный параметр нулевой

'surveys/:surveyId?:opts': 'SurveyList:Selected' 

и следующий обработчик, который захватывает любой маршрут и переиздает его на автобусе сообщение для моих просмотров обращаться:

this.on('route', function() { 
    PubSub.publish(Events.RouteChanged, { 
     route: arguments[0], 
     options: arguments[1] 
    }); 
}); 

Когда маршрутизатор совпадает с маршрутом surveys/myTestId123?pageNum=2, ожидаемое поведение является то, что arguments[1] будет массив из 2-х аргументов: myTestId123 и pageNum=2. Однако на самом деле это массив с тремя аргументами - двумя вышеупомянутыми и значением null в качестве третьего. Я сузил это до метода _extractParameters, который соответствует фрагменту url для регулярного выражения. В этом случае регулярное выражение равно /^surveys\/([^\/?]+)(?:\?([^\/?]+))?(?:\?([\s\S]*))?$/i.

Интересно, что я получаю правильные параметры, когда маршрут surveys/:surveyId, который в свою очередь производит это регулярное выражение: /^surveys\/([^\/?]+)(?:\?([\s\S]*))?$/i.

Here is a fiddle showing the problem in action.

Является ли проблема с регулярным выражением, которое создает базовая линия из моего маршрута, или проблема с самим маршрутом?

ответ

0

Я думаю, что я только что нашел ответ. Похоже, что Backbone уже делает то, что я пытаюсь сделать. Если у меня есть маршрут surveys, он также предоставляет параметр null. Тем не менее, регулярное выражение создает выглядит следующим образом:

/^surveys(?:\?([\s\S]*))?$/i 

Это, кажется, уже совпадают QueryString параметров, что объясняет, почему более короткий маршрут работает в моем примере выше. Те умные люди в Backbone были на шаг впереди меня.

Update:

Из журнала изменений v1.1.1 Backbone:

Магистральные маршрутизаторы в настоящее время обрабатывать параметры запроса в виде фрагментов маршрута, передавая их в обработчик в качестве последнего аргумента. Маршруты, указанные как строки , больше не должны включать строку запроса ('foo?: Query' должно be 'foo').

Смежные вопросы