获取当前网址查询字符串

时间:2016-08-24 12:33:23

标签: handlebars.js assemble grunt-assemble

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

我的网址看起来像这样:groups/group-details/?id=1我希望得到id值。

这是我的帮手:

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

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

{{currentId}}

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

我哪里错了?

- 编辑 -

在Web检查器控制台中进行挖掘显示我的帮助程序已注册,但如果我在return语句中放置了断点,则它永远不会被命中。我假设帮助者没有被“执行”。

2 个答案:

答案 0 :(得分:2)

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

如果它正在这样做,我预计助手内部会出现错误,因为document.location.search不可用。由于你没有在那里收到错误,我假设帮助程序没有在汇编中注册,只在你的前端Handlebars实例中注册。如果没有使用汇编注册,则{{currentId}}被Handlebars解释为值并且不呈现任何内容。

TL; DR;

混合使用前端模板和后端模板时,需要转义前端模板,以便后端进程不会呈现它们。尝试使用\{{currentId}}查看是否使用了帮助程序。

答案 1 :(得分: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罚款。

我之所以选择正则表达式,是因为你已经进行了两次字符串操作,这可能不是最有效的方法。