【问题标题】:Jade partial inheritance block/extend implementationJade 部分继承块/扩展实现
【发布时间】:2012-10-10 17:36:17
【问题描述】:

一段时间以来,我一直在跨多个不同框架的应用程序中使用 partials;我对 Jade 的实现或我的错误用法感到困惑,并希望获得其他开发者的经验以及对我的理解的任何更正。

文件夹结构:

$ cd <app_root>/views
$ ls
  myHoverToolTip.jade
  layout.jade

来电者:

httpJadeViewerRsp = (req, res) -> res.render('myHoverToolTip.jade', { variable: 'here' })

myHoverToolTip.jade

extends layout

block myHoverToolTip
  .some-div
    h1 Awesome-O Rocks

layout.jade

<...bunch of jade markup...>
.div
  block myHoverToolTip
    h5 Content to remove

这适用于少数用例,在这些用例中,您只是提供一个页面并正在寻找一种提供布局的标准方法。然而,偏离这一点并以更模块的方式使用部分来干掉事情,你会发现扩展/块的这种实现让我摸不着头脑。我想将我的工具提示分成一个部分,以便在数据网格中重用(当然将许多变量传递给部分,所以忘记包含),这个实现禁止我拥有这种能力。谁能为我提供进一步的见解,纠正我的用法,或指导我使用更好的 NodeJs-ready 模板库,该库可与 Express 3 一起使用

【问题讨论】:

    标签: javascript node.js template-engine pug


    【解决方案1】:

    听起来像mixins 可能会对您有所帮助。

    【讨论】:

    • 当然,不知道我是怎么错过的!然而,在绝望地尝试“包含”以查看结果对我自己来说究竟是什么之后,我发现它确实将变量带入了包含中。我显然跳过了文档的另一部分。
    【解决方案2】:

    自 2012 年 8 月和 Express 3 起,“部分”支持已被删除,但该功能仍可通过不带引号或括号的“包含 [yourtemplatename]”表达式使用。

    EJS 模板是 Jade 的替代品,我也发现它很有用,它更像 ASP.NET / JSTL。

    编辑:在这两种情况下,可用的父上下文和变量都可以通过包含访问。

    【讨论】:

    • 不确定您是否阅读了我的帖子...我正在遵循 Express 3 指令,即使用模板引擎的继承进行部分实现。 Jade 是我所知道的唯一一个指定了继承的 JS 模板引擎。我相信这在 EJS 中不受支持,我错了吗?另请注意将变量发送到“包含”不支持的部分的要求,如果我误解了“包含”是如何呈现(静态)的,请纠正我。
    • 根据使用其他语言的经验假设您没有错,但是在这种情况下,这些系统中的“包含”确实继承了父上下文,而无需采取额外的步骤。由于 Express 和相关的模板系统最近发生了变化,我最近看到了很多关于 partials 与 include 的混淆。
    猜你喜欢
    • 2012-12-17
    • 2011-09-14
    • 1970-01-01
    • 2013-02-26
    • 2017-05-18
    • 2013-12-19
    • 2014-04-29
    • 1970-01-01
    • 2011-05-06
    相关资源
    最近更新 更多