Получить текущую строку запроса URL
Я пытаюсь написать помощник руля, который выплевывает текущую строку запроса URL. Затем я буду использовать эту строку запроса для заполнения шаблона. Я использую ассемблер, чтобы сделать генерацию HTML-файла.
Мои URL выглядят так: groups/group-details/?id=1
и я хочу получить значение id.
Вот мой помощник:
Handlebars.registerHelper('currentId', function() {
return document.location.search.split('?')[1].split('=')[1];
});
И я называю это в моем шаблоне.hbs следующим образом:
{{currentId}}
Я ожидаю, что это просто выплюнет 1
в этом примере, но ничего не показано.
Куда я иду не так?
- Редактировать -
Копаться в консоли веб-инспектора показывает, что мой помощник зарегистрирован, но если я поставлю точку останова в операторе return, он никогда не попадет в цель. Я предполагаю, что помощник просто не "казнен".
2 ответа
Если вы создаете HTML с помощью ассемблера, то ассемблер выполняет передачу с помощью Handlebars. Этот проход рендеринга будет пытаться разрешить {{currentId}}
Шаблон на сервере.
Если он делает это, я бы ожидал ошибку внутри помощника, так как document.location.search
не доступен. Так как вы не видите там ошибки, я предполагаю, что помощник не зарегистрирован в ассемблере и только в вашем внешнем экземпляре Handlebars. Если это не зарегистрировано на ассемблере, то {{currentId}}
интерпретируется как значение Handlebars и ничего не отображает.
TL; DR;
При смешивании шаблонов внешнего интерфейса и шаблонов внутреннего интерфейса необходимо избегать шаблонов внешнего интерфейса, чтобы внутренний процесс не отображал их. Попробуйте использовать \{{currentId}}
чтобы увидеть, используется ли помощник.
Не совсем уверен, почему вы идете не так.
Но я бы использовал здесь регулярное выражение.
для разбора 1
снаружи groups/group-details/?id=1
var a = (new RegExp('/?id=(\d)+'));
var v = a.exec('groups/group-details/?id=1')[1];
console.log(v);
Кроме того, я попробовал
"groups/group-details/?id=1".split('?')[1].split('=')[1]
и он возвращается 1
хорошо.
Причина, по которой я бы использовал regex, заключается в том, что вы уже выполняете две строковые операции, которые могут оказаться не самым эффективным способом.