0

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

我的网址如下所示:groups/group-details/?id=1我想获得 id 值。

这是我的帮手:

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

我在我的 .hbs 模板中这样称呼它:

{{currentId}}

我希望它1在这个例子中只是吐出来,但什么也没显示。

我哪里错了?

- 编辑 -

在 web 检查器控制台中挖掘显示我的助手已注册,但如果我在 return 语句上放置一个断点,它永远不会被击中。我认为助手只是没有被“执行”。

4

2 回答 2

2

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

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

TL;博士;

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

于 2016-08-25T15:53:40.267 回答
1

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

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

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正常。

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

于 2016-08-24T12:42:49.857 回答