使用 Sails.js 在 EJS 模板中自定义 Javascript
Custom Javascript in EJS templates using Sails.js
我被 Sail.js 弄湿了,到目前为止我很喜欢它,但我被困在一个简单的问题上:如果我有一个 javascript 函数,我想 [=33] =] 仅在特定视图上,我在哪里调用它?
一个非常简单的例子是这样的:
//contact.ejs
<div id="contact"></div>
<script>
renderContact();
</script>
让我们假设 renderContact
是在我的网站主 JS 文件中定义的,并且看起来像这样:在 <div id='contact'></div>
.
中创建联系人列表
当然,该主 JS 文件以及所有供应商 JS 都不会在该脚本标记之后加载,因为它已注入 layout.ejs
,因此该函数将是未定义的。我总是可以像这样本机等待页面加载:
document.addEventListener("DOMContentLoaded", function(event) {
renderContact();
});
但这似乎是一个糟糕的解决方案。
我意识到 Sails 与 Angular、React 等功能强大地集成在一起,但在我开始幻想之前,我首先想了解将 JS 调用到单个页面的基本方式。一旦 DOM 已加载,必须有更好的方法来 运行 某些页面上的某些功能?
所以要让 renderContact
正常工作,它应该如下所示:
<html>
<head></head>
<body>
HTML
<script src="master.js"></script>
<script>
(function() {
renderContact();
})();
</script>
</body>
</html>
ejs 的缺点是 AFAIK 它不支持块。这是一种裸机。因此,您必须将所有脚本放在主布局文件中,脚本将出现在不需要它们的页面上。但是你可以在 sails 中配置其他模板引擎,比如 jade。 Jade 支持您可以覆盖或扩展的块。这是玉块的示例:
我被 Sail.js 弄湿了,到目前为止我很喜欢它,但我被困在一个简单的问题上:如果我有一个 javascript 函数,我想 [=33] =] 仅在特定视图上,我在哪里调用它?
一个非常简单的例子是这样的:
//contact.ejs
<div id="contact"></div>
<script>
renderContact();
</script>
让我们假设 renderContact
是在我的网站主 JS 文件中定义的,并且看起来像这样:在 <div id='contact'></div>
.
当然,该主 JS 文件以及所有供应商 JS 都不会在该脚本标记之后加载,因为它已注入 layout.ejs
,因此该函数将是未定义的。我总是可以像这样本机等待页面加载:
document.addEventListener("DOMContentLoaded", function(event) {
renderContact();
});
但这似乎是一个糟糕的解决方案。
我意识到 Sails 与 Angular、React 等功能强大地集成在一起,但在我开始幻想之前,我首先想了解将 JS 调用到单个页面的基本方式。一旦 DOM 已加载,必须有更好的方法来 运行 某些页面上的某些功能?
所以要让 renderContact
正常工作,它应该如下所示:
<html>
<head></head>
<body>
HTML
<script src="master.js"></script>
<script>
(function() {
renderContact();
})();
</script>
</body>
</html>
ejs 的缺点是 AFAIK 它不支持块。这是一种裸机。因此,您必须将所有脚本放在主布局文件中,脚本将出现在不需要它们的页面上。但是你可以在 sails 中配置其他模板引擎,比如 jade。 Jade 支持您可以覆盖或扩展的块。这是玉块的示例: