我正在尝试编写一个把握当前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语句中放置了断点,则它永远不会被命中。我假设帮助者没有被“执行”。
答案 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
罚款。
我之所以选择正则表达式,是因为你已经进行了两次字符串操作,这可能不是最有效的方法。