我是来自ASP.NET MVC的node,express和EJS的新手。在Razor中,有一个名为“sections”的功能允许我在布局文件中为脚本和样式表等内容指定占位符,并在以后在我的个别视图中引用它们,当这些视图需要特定的脚本和样式表时。这样,所有样式表都保持在顶部,所有脚本都保持在底部。 EJS中是否有类似的功能?
答案 0 :(得分:1)
根据您的建议发布答案。
EJS是一个相当“裸机”的实现,虽然它有部分功能,我认为它不会干净地给你你想要的东西,因为它没有真正建模在'布局'概念上。您可能需要考虑将Jade视为模板引擎。它是Express的默认模板引擎,如果您尚未使用它,可能会很快使用它。
就个人而言,我发现我一般都非常喜欢翡翠。我的眼睛更容易,因为它简洁明了。
资源:
使用block
语法是我认为您想要的内容,我不认为这些资源中有详细记录,但这是一个例子:
<强> layout.jade 强>
doctype html
html
head
title #{title} / #{version}
link(rel='stylesheet', href='/css/site.css')
script(src='/js/mygenericscript.js')
block head
body(class='foo')
// the line below could be written as '#maincontent.bodyclass'
div(id='maincontent', class='bodyclass')
block content
<强> template.jade 强>
extends layout
block head
// here I am including a page-specific script & stylesheet in the head section
script(src='/js/mypagescript.js')
link(rel='stylesheet', href='/css/crazypage.css')
block content
div(class='page-specific-class')
//etc, etc
答案 1 :(得分:0)
我希望有一个可行的ejs解决方案,但根据@ barry-johnson的回答,它看起来似乎没有。关于ejs的好处(从我的角度来看)是你如何仍然可以在代码中编写普通的html,但是我很难看到jade中另一个抽象的好处。
对我来说这是一个很大的问题,如果ejs不能很好地完成这个技巧,那么ejs看起来并不值得。
与@ barry-johnson的评论一起寻找替代方案,可能是一个真正可行的选择 nunjucks 。它似乎是一个活跃的项目,在github上有超过一千颗星,而block选项似乎就是答案,尽管我还没有尝试过任何东西。 (也许已有的人可以证实。)
http://mozilla.github.io/nunjucks/templating.html#block
阻止强>
块定义模板上的一个部分,并用名称标识它。 这由模板继承使用。基本模板可以指定 块和子模板可以使用新内容覆盖它们。看到 模板继承。
{% block css %} <link rel="stylesheet" href="app.css" /> {% endblock }
Nunjucks在部分中使用{{ }}
语法,如果您还使用AngularJS,这应该是一个问题。但是,正如我在github上向我指出的那样,你可以通过自定义nunjucks语法解决这个问题,我认为这比改变Angular的绑定语法更可取。
https://mozilla.github.io/nunjucks/api.html#customizing-syntax