在Express上使用外部模块进行Jade模板继承的好策略

时间:2012-08-29 09:48:05

标签: javascript node.js inheritance express pug

我正在开发一个框架,开发人员可以在外部模块中实现子模板。我想稍后在父模板中包含该模板。

这是一个基本的模板架构:

  

─使命(父模板)
          ├─成功使命(儿童模板)
          ├─任务失败(儿童模板)
          └─玩任务(儿童模板)

父模板对每个人都是一样的。子模板由贡献者实现,并始终显示在不同的时刻(任务状态)。

我在一个模板文件中尝试了两种方法。

实施"块"模式:

block mission_play
  h2 Hello world!
  p Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
block mission_succeed
  h2 Congratulations!
  p You won buddy!
block mission_failed
  h2 Oh my gosh, dude, you did something realy bad
  p You should try again

那个人不会工作因为我没有得到任何extend layout指令(因为每个子模板都是外部模块所以我无法使用)。 有没有办法手动指示玉哪个模板扩展?

在mixin中实现每个子模板:

mixin mission_introduction(mission)
  h2 Hello world!
  p Lorem ipsum dolor sit amet, consectetuer adipiscing elit.

mixin mission_succeed(mission)
  h2 Congratulations!
  p You win buddy!

mixin mission_failed(mission)
  h2 Oh my gosh dude, you did something realy bad
  p You should try again

我打算在其父级中包含该模板,但Jade不允许在include的路径中使用表达式。这就是为什么我尝试直接在父玉模板中解释玉代码,但我没有找到如何。我甚至尝试将其包含在partial function中,但我可以使用该模块而不禁用Express中的默认视图继承策略。

所以,我错了?这座建筑之王的最佳策略是什么?

干杯!

1 个答案:

答案 0 :(得分:3)

我终于找到了一个好策略:

case mission.state
    when "game"
      block mission_introduction   
        h2 Hello world!
        p Lorem ipsum dolor sit amet, consectetuer adipiscing elit.

    when "succeed"
      block mission_succeed  
        h2 Congratulations!
        p You win buddy!              

    when "failed"
      block mission_failed                                    
        h2 Oh my gosh dude, you did something realy bad
        p You should try again

干杯!