模板中的路径解析
模板标签中的标识符通常就是有效的JavaScript标识符,一系列以.或/连接的标识符, 称为路径。比如下面的模板标签中,foo, 'So wierd!', 12304, null都是有效的标识符, 而foo.bar, ./name都是有效的路径:
{{foo}}
{{foo.bar}}
{{./name}}
{{'So wierd!'}}
{{12304}}
{{null}}
路径的第一个标识符,被Meteor用来在helpers中搜索同名的helper,以便将helper函数 的结果运用到模板中。这个搜索过程称为路径解析。
≡ 路径解析
以模板标签{{title}}为例,Meteor优先使用标识符title对应的helper。如果找不到 helper,就使用当前数据上下文对象的title属性。对标识符title的解析流程如下图:
在路径解析时,从第二个标识符开始,后面的标识符将被视为前一个标识符的属性。 以模板标签{{person.name}}为例,name将被视为person的属性,因此,这个标签可能会 被转化为以下调用:person().name, person().name(), person.name 或者 person.name()
≡ 特殊标识符
Spacesbars支持在模板标签中使用以下特殊标识符:
- this或. - 表示当前的数据上下文对象。例如下面的两个模板标签都将最终被 替换为当前数据上下文的name属性值:{{this.name}}, {{./name}}
- .. - 表示外层/父模板的数据上下文对象。例如下面模板标签将最终被 替换为父模板的数据上下文的name属性值:{{../name}}
执行以下命令复位test应用、删除源文件:
~/test$ meteor reset↵
~/test$ rm -rf \*↵
执行以下命令拷贝tpl-path-resovle示例代码、运行并查看运行结果:
~/test$ cp ~/demos/tpl-path-resolve/* .↵
~/test$ meteor↵
理解并修改tpl-path-resolve示例代码,通过练习理解模板中的特殊标识符和路径解析过程。