Handlebars中"scope"的含义
The meaning of "scope" in Handlebars
我对 Handlebars 模板引擎中的 "scope" 感到困惑。在它的 documentation on block helpers 中,我阅读了
"Private variables provided via the data option are available in all
descendent scopes. Private variables defined in parent scopes may be
accessed via pathed queries."
我理解编程语言中使用的范围的含义(其中 {}
通常用于创建范围)。但是 "scope" 在 Handlebars 模板中指的是什么?
其实很相似,看这里的例子:https://jsfiddle.net/veraee/63gs19j3/11/
为了清楚起见,车把中有两种 "variables":
model/context。这是您在重新渲染时注入模板的数据。将其用于您的正常工作。
这些变量在模板中通过其名称在 {{}}:
中引用
{{firstname}}
并通过 "this":
暴露在助手的 javascript 中
this.firstname
“@”变量。此数据是通过 javascript 在助手内部生成的。
这些变量在模板中通过带有“@”前缀的名称引用:
{{@foo}}
并通过 "options.data":
暴露在助手的 javascript 中
options.data.foo
OP 中 handlebars 文档的引用大约是第 2 个。
在编程语言中,“{”进入范围,
在把手中,块“{{#myBlock...”进入范围。
与编程语言类似,您可以在内部作用域 (foo, bla) 中使用外部作用域中的所有变量,
但是如果你在内部范围(bla)中重新定义一个,原始值将
在内部范围内 shadowed。当离开内部作用域并再次存在时
在外部作用域中,您再次获得 bla 的旧值。
但请注意编程语言的这些差异:
这种作用域不会因编程语言语法的某些魔法而发生,
正如文档还提到的那样,您必须自己做,即这样:
data = Handlebars.createFrame(options.data);
作为奖励,您可以访问阴影变量(这在编程语言中通常是不可能的)
通过在名称前加上“../”前缀,这意味着:查看前一个(也称为外部)作用域(参见示例中内部作用域中的“{{@../bla}}”)。
我对 Handlebars 模板引擎中的 "scope" 感到困惑。在它的 documentation on block helpers 中,我阅读了
"Private variables provided via the data option are available in all descendent scopes. Private variables defined in parent scopes may be accessed via pathed queries."
我理解编程语言中使用的范围的含义(其中 {}
通常用于创建范围)。但是 "scope" 在 Handlebars 模板中指的是什么?
其实很相似,看这里的例子:https://jsfiddle.net/veraee/63gs19j3/11/
为了清楚起见,车把中有两种 "variables":
model/context。这是您在重新渲染时注入模板的数据。将其用于您的正常工作。 这些变量在模板中通过其名称在 {{}}:
中引用{{firstname}}
并通过 "this":
暴露在助手的 javascript 中this.firstname
“@”变量。此数据是通过 javascript 在助手内部生成的。 这些变量在模板中通过带有“@”前缀的名称引用:
{{@foo}}
并通过 "options.data":
暴露在助手的 javascript 中options.data.foo
OP 中 handlebars 文档的引用大约是第 2 个。
在编程语言中,“{”进入范围, 在把手中,块“{{#myBlock...”进入范围。
与编程语言类似,您可以在内部作用域 (foo, bla) 中使用外部作用域中的所有变量, 但是如果你在内部范围(bla)中重新定义一个,原始值将 在内部范围内 shadowed。当离开内部作用域并再次存在时 在外部作用域中,您再次获得 bla 的旧值。
但请注意编程语言的这些差异:
这种作用域不会因编程语言语法的某些魔法而发生, 正如文档还提到的那样,您必须自己做,即这样:
data = Handlebars.createFrame(options.data);
作为奖励,您可以访问阴影变量(这在编程语言中通常是不可能的) 通过在名称前加上“../”前缀,这意味着:查看前一个(也称为外部)作用域(参见示例中内部作用域中的“{{@../bla}}”)。