【问题标题】:Get current url query string获取当前url查询字符串
【发布时间】:2016-12-31 14:20:28
【问题描述】:

我正在尝试编写一个句柄助手来吐出当前的 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 语句上设置断点,它永远不会被命中。我假设助手没有被“执行”。

【问题讨论】:

    标签: handlebars.js assemble grunt-assemble


    【解决方案1】:

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

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

    TL;DR;

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

    【讨论】:

    • 好的,我明白你在说什么。放入\{{currentId}} 只是在生成的html 中输出{{currentId}}
    • 你也在浏览器中渲染模板吗?如果没有,那么我认为document 将不会在服务器上可用,因此当时没有查询字符串。
    • 我不是,不。您所说的关于查询字符串的内容非常有意义。我将不得不更改我的方法并在浏览器中为该组页面呈现模板。
    【解决方案2】:

    不太清楚你为什么会出错。

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

    用于从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]

    它返回1 很好。

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

    【讨论】:

      猜你喜欢
      • 2018-09-04
      • 2012-04-09
      • 2014-01-30
      • 2021-07-19
      • 2013-11-21
      • 2018-02-14
      • 2012-08-19
      • 1970-01-01
      • 2012-03-31
      相关资源
      最近更新 更多