我对Handlebars模板引擎中的“范围”感到困惑。在documentation on block helpers中,我读了
“通过数据选项提供的私有变量全部可用 后代范围。在父作用域中定义的私有变量可能是 通过pathed查询访问。“
我理解编程语言中使用的范围的含义(其中{}
通常用于创建范围)。但是“范围”在Handlebars模板中引用了什么?
答案 0 :(得分:2)
实际上非常相似,请在此处查看示例:https://jsfiddle.net/veraee/63gs19j3/11/
为了说清楚,手把中有两种类型的“变量”:
模型/上下文。这是您在重新排序时注入模板的数据。用于正常工作。 这些变量在模板中通过{{}}中的名称引用:
{{firstname}}
并通过“this”在帮助者的javascript中公开:
this.firstname
“@” - 变量。这些数据是通过javascript在帮助程序内生成的。 这些变量在模板中通过名称引用,带有'@' - 前缀:
{{@foo}}
并通过“options.data”在助手的javascript中公开:
options.data.foo
OP中车把文件的引用大约是2号。
在编程语言中,“{”进入范围, 在把手中,一个块“{{#myBlock ...”进入范围。
与编程语言类似,您可以使用内部范围(foo,bla)中外部范围的所有变量, 但是如果你在内部范围(bla)中重新定义一个,原始值将会 在内部范围内阴影。当离开内部范围并再次出现时 在外部范围内,您再次获得bla的旧值。
但请注意这些与编程语言的差异:
这个范围不是通过编程语言语法的一些魔力发生的, 正如文档所提到的那样,你必须自己做,即这样:
data = Handlebars.createFrame(options.data);
作为奖励,您可以访问阴影变量(这在编程语言中通常是不可能的) 通过在名称前添加“../”来表示:查看上一个(又名外部)范围(请参阅示例中内部范围中的“{{@ .. / bla}}”。)