【问题标题】:Custom Javascript in EJS templates using Sails.js使用 Sails.js 在 EJS 模板中自定义 Javascript
【发布时间】:2017-01-07 12:47:53
【问题描述】:

到目前为止,我对 Sail.js 很感兴趣,但我遇到了一个简单的问题:如果我有一个 javascript 函数,我只想在特定视图上运行,我应该在哪里调用它?

一个非常简单的例子是这样的:

  //contact.ejs
  <div id="contact"></div>
  <script>
  renderContact();
  </script>

假设renderContact 是在我的站点主JS 文件中定义的,它的作用类似于:在&lt;div id='contact'&gt;&lt;/div&gt; 中创建一个联系人列表。

当然,该主 JS 文件以及所有供应商 JS 直到此脚本标记之后才会被加载,因为它已注入 layout.ejs,因此该函数将未定义。我总是可以像这样自然地等待页面加载:

document.addEventListener("DOMContentLoaded", function(event) { 
    renderContact();
});

但这似乎是一个可怕的解决方案。

我意识到 Sails 与 Angular、React 等功能强大的集成,但我首先想了解调用 JS 到单个页面的基本方式,然后才开始花哨。必须有更好的方法在 DOM 加载后仅在某些页面上运行某些功能?

【问题讨论】:

    标签: javascript dom sails.js ejs


    【解决方案1】:

    所以renderContact 的工作应该是这样的:

     <html>
       <head></head>
       <body>
          HTML
          <script src="master.js"></script>
          <script>
             (function() {
                renderContact();
             })();
          </script>
       </body>
    </html>
    

    ejs 的缺点是 AFAIK 它不支持块。这是一种裸机。因此,您必须将所有脚本放在主布局文件中,并且脚本将出现在不需要它们的页面上。但是你可以在sails中配置其他模板引擎,比如jade。 Jade 支持您可以覆盖或扩展的块。下面是玉石块的例子:https://stackoverflow.com/a/22748166/401025

    【讨论】:

    • 谢谢!切换到 SWIG
    猜你喜欢
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多