注意:当预编译时,你必须在编译时添加这些扩展,你应该使用 (或者 grunt 或任务),而不是预编译脚本。你需要创建一个 实例,添加扩展,传到预编译器中。
一个扩展至少有两个字段 tags
和 parse
,扩展注册一个标签名,如果运行到这个标签则调用 parse。
tags
为这个扩展支持的一组标签名。parse
为一个函数,当编译时会解析模板。除此之外,还有一个特殊的节点名为 ,在运行时你可以调用本扩展的其他方法,下面会详细说明。
因为你需要直接使用 parse api,并且需要手动分析初 AST,所以有一点麻烦。如果你希望做一些复杂的扩展这是必须的。所以介绍一下你会用到的方法:
parseUntilBlocks(names)
- 解析内容直到下一个名为 的标签,非常有用解析标签之间的内容。
parser API 还需要更多的文档,但现在对照上面的文档和下面的例子,你还可以看下。
最常用使用的是在运行时解析标签间的内容,就像过滤器一样,但是更灵活,因为不只是局限在一个表达式中。通常情况下你会解析模板,然后将内容传入回调。你可以使用 CallExtension
,需要传扩展的实例,方法名,解析的参数和内容(使用 parseUntilBlocks
解析的)。
例如,下面实现了从远程获取内容并插入的扩展:
如果是异步的可以使用 CallExtensionAsync
,在运行时扩展有一个回调作为最后一个参数,模板渲染会等待回调返回。
上面例子中的 run
如下使用
如果你做了些有趣的东西的话,请记得把他们添加到wiki中!