获取当前 url 查询字符串

Get current url query string

我正在尝试编写一个 handlebars helper 来输出当前的 url 查询字符串。然后我将使用该查询字符串来填充模板。我正在使用 assemble 生成 html 文件。

我的 url 看起来像这样:groups/group-details/?id=1 我想获取 id 值。

这是我的帮手:

Handlebars.registerHelper('currentId', function() {
    return document.location.search.split('?')[1].split('=')[1];
});

我在我的 .hbs 模板中这样调用它:

{{currentId}}

我希望它在这个例子中只是吐出 1 但没有显示任何内容。

我哪里错了?

- 编辑 -

在 Web 检查器控制台中四处挖掘显示我的助手已注册,但如果我在 return 语句上放置断点,它永远不会被击中。我假设助手不是 'executed'.

不太确定你为什么会出错。

但是,我会在这里使用正则表达式。

用于从 groups/group-details/?id=1

中解析 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]

而且 returns 1 很好。

我选择正则表达式的原因是你已经在进行两个字符串操作,这可能不是最有效的方法。

如果您使用 assemble 创建 html,则 assemble 正在使用 Handlebars 执行渲染过程。此渲染过程将尝试解析服务器上的 {{currentId}} 模板。

如果它这样做了,我预计助手内部会出现错误,因为 document.location.search 不可用。由于您在那里没有收到错误,我假设该助手未在 assemble 中注册,并且仅在您的 Handlebars 前端实例中注册。如果它没有在 assemble 中注册,那么 {{currentId}} 会被 Handlebars 解释为一个值并且不呈现任何内容。

TL;DR;

混合使用前端模板和后端模板时,您需要对前端模板进行转义,这样后端进程就不会渲染它们。尝试使用 \{{currentId}} 查看是否使用了助手。