Получить текущую строку запроса 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, заключается в том, что вы уже выполняете две строковые операции, которые могут оказаться не самым эффективным способом.

Другие вопросы по тегам