我可以访问jade模板中定义的变量吗?

时间:2013-07-18 03:31:05

标签: pug

我正在使用jade来创建电子邮件模板,所以我为每种类型的电子邮件和每种语言都有一个玉文件。我希望能够从jade模板中设置电子邮件主题,它可以是通过读取模板内定义的变量,也可以通过查找title标签的内容,但我不能做任何一个。有没有办法将html标签绑定到一个函数,以便我可以得到它的内容?或者只是能够访问jade模板中定义的变量?

谢谢!

1 个答案:

答案 0 :(得分:1)

这就是我所做的。

首先,我扩展了jade.Compiler以创建我自己的编译器,重写visitTag方法,以便能够在使用title标签时捕获。

subjects = {}

EmailCompiler = (node, options) ->
  jade.Compiler.call(this, node, options)
EmailCompiler::__proto__ = jade.Compiler.prototype;

EmailCompiler::visitTag = (tag) ->
  if tag.name is 'title'
    subjects[@options.filename] = @getText tag.block.nodes[0]
  jade.Compiler.prototype.visitTag.call(this, tag)

EmailCompiler::getText = (nodes, glue='') ->
  [].map.call(nodes.nodes, (node) -> node.val).join glue

然后像这样调用jade编译器:

fs.readFile filePath, (err, str) ->
  jade.compile str,
    compiler: EmailCompiler
    filename: filePath

希望它有所帮助!