Handlebars中“范围”的含义

时间:2017-11-18 08:10:32

标签: handlebars.js handlebars.java

我对Handlebars模板引擎中的“范围”感到困惑。在documentation on block helpers中,我读了

  

“通过数据选项提供的私有变量全部可用   后代范围。在父作用域中定义的私有变量可能是   通过pathed查询访问。“

我理解编程语言中使用的范围的含义(其中{}通常用于创建范围)。但是“范围”在Handlebars模板中引用了什么?

1 个答案:

答案 0 :(得分:2)

实际上非常相似,请在此处查看示例:https://jsfiddle.net/veraee/63gs19j3/11/

为了说清楚,手把中有两种类型的“变量”:

  1. 模型/上下文。这是您在重新排序时注入模板的数据。用于正常工作。 这些变量在模板中通过{{}}中的名称引用:

    {{firstname}}

  2. 并通过“this”在帮助者的javascript中公开:

    this.firstname
    
    1. “@” - 变量。这些数据是通过javascript在帮助程序内生成的。 这些变量在模板中通过名称引用,带有'@' - 前缀:

      {{@foo}}

    2. 并通过“options.data”在助手的javascript中公开:

      options.data.foo
      

      OP中车把文件的引用大约是2号。

      在编程语言中,“{”进入范围, 在把手中,一个块“{{#myBlock ...”进入范围。

      与编程语言类似,您可以使用内部范围(foo,bla)中外部范围的所有变量, 但是如果你在内部范围(bla)中重新定义一个,原始值将会 在内部范围内阴影。当离开内部范围并再次出现时 在外部范围内,您再次获得bla的旧值。

      但请注意这些与编程语言的差异:

      1. 这个范围不是通过编程语言语法的一些魔力发生的, 正如文档所提到的那样,你必须自己做,即这样:

        data = Handlebars.createFrame(options.data);

      2. 作为奖励,您可以访问阴影变量(这在编程语言中通常是不可能的) 通过在名称前添加“../”来表示:查看上一个(又名外部)范围(请参阅示例中内部范围中的“{{@ .. / bla}}”。)