使用 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 支持您可以覆盖或扩展的块。这是玉块的示例: