【问题标题】:In handlebars, how can I escape special characters in field names?在车把中,如何转义字段名称中的特殊字符?
【发布时间】:2018-06-12 20:24:27
【问题描述】:

例如我有一个像这样的对象:

{ '#SKU_NBR': '123' }

我想打印出这个值,但是简单的语法不起作用:

<div>{{#SKU_NBR}}<div>

如何转义字段的名称,以便可以在车把的模板表达式中使用它?

【问题讨论】:

  • 你试过什么? &lt;div&gt;{{&amp;#35;SKU_NBR}}&lt;div&gt; 有效吗?
  • 我试过{{#SKU_NBR}}(显然)、{{\#SKU_NBR}}{{##SKU_NBR}} 你的建议是给我Parse error on line 1: {{&amp;#35;SKU_NBR}} ---^ Expecting 'ID', 'STRING', 'NUMBER', 'BOOLEAN', 'UNDEFINED', 'NULL', 'DATA', got 'INVALID'" 我确实有一个解决方法,但我想看看是否有人有更好的答案在这里发布。
  • 为什么不把#放到对象键中呢?对我来说,坚持使用{ SKU_NBR: '123 } 似乎更容易。
  • @mccambridge 它来自第 3 方 CSV 文件,而我正在使用的库只是逐字使用列名。从文件发出的每一行都有这个键名,我通常将这些模板应用于字段。我可能最终只是将其剥离,但这可能很烦人,因为它们与实际的列名不匹配。但如果可能的话,我宁愿知道如何逃脱它们,如果没有,那么我可能会想出类似的东西。我确实设法弄清楚如何使用助手。
  • 这么多的可能性。 {{ "#SKU_NBR" }}{{ '#SKU_NBR' }}{{ [#SKU_NBR] }}。随便选一个。 # 是车把块表达式的语法前缀。顺便说一句,它已经回答了。

标签: javascript handlebars.js


【解决方案1】:

要详细说明 bigless 的答案,您可以使用以下任何一种:

  • {{ "#SKU_NBR" }}
  • {{ '#SKU_NBR' }}
  • {{ [#SKU_NBR] }}

这些解析在转义字符中命名的变量(而不是只包括字符串#SKU_NBR)。

我遇到了类似的问题,因为我有名为 thiswith 的变量。我发现 {{[this]}} 按预期工作,但 {{[with]}} 没有。我可以通过使用 {{this.with}}

来解决这个问题

【讨论】:

    【解决方案2】:

    解决此问题的一种方法是使用辅助函数。我制作了一个名为 get 的函数,它只是根据字符串获取一个字段。

    import Handlebars from 'handlebars'
    import get from 'lodash/get'
    
    Handlebars.registerHelper('get', function (path, opts) {
        return get(opts, `data.root.${path}`)
    })
    
    const template = Handlebars.compile('{{get "#upc"}}');
    const result = template({ '#upc': 'abc123' })
    
    console.log(result) // abc123
    

    你也可以像这样在子表达式中使用它:

    {{tolowercase (get "#upc")}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-17
      相关资源
      最近更新 更多