如何在布局脚本下面创建视图脚本

时间:2018-04-01 06:00:00

标签: sails.js

如何在布局中使用脚本块

布局文件:

<html>

-- styles files ---
  <body>
    <%- body %>  <!-- view content -->


   -- layout's scripts ---

  </body>
</html>

查看文件:

--- html tags ---
 view's scripts

=&GT;我想在布局的脚本下面查看脚本,但不能。 当我把脚本放在布局中时,它是正文,意味着它将高于布局的脚本。

我不知道sailsjs有没有办法像php laravel框架那样定义块?或任何方式。

谢谢!

1 个答案:

答案 0 :(得分:3)

使用默认资产管道,

推荐的解决方法:

如果可以的话,我实际上建议完全避免这个问题:相反,请转到您的tasks/pipeline.js文件并添加您想要引入的脚本。这意味着它将被包含在所有页面中(作为开发中的脚本标记,以及在临时/生产中的缩小包中)。但根据我的经验,清晰度值得。 (另外,请记住,在制作中,您可能希望将所有脚本放在一个捆绑包中 - 或者大部分都是这样。)

screenshot of tasks/pipeline.js

另一种方式:

如果仍然不能满足您的需求,并且您绝对不能在其他页面上存在该脚本(例如,因为您正在进行后期制作并且正在优化您的捆绑包的大小)那么您通过修改Grunt任务以支持不同的链接器,或者使用Brunch,Webpack或Gulp等其他工具,可以完成您最初要做的事情。

或者,如果您(可以理解)不想自定义您的Grunt任务,那么您可能使用的另一个解决方案是在layout.ejs中添加脚本标记,但将其包装在条件中:< / p>

… (the automatically-injected scripts)
<script src="/dependencies/lodash.js"></script>
<script src="/js/utils/baz.js"></script>
<script src="/js/components/datepicker.component.js"></script>
<script src="/js/pages/foo/bar.page.js"></script>
<script src="/js/pages/beep/boop.page.js"></script>
… (etc)
<!--SCRIPTS END-->

<% if (view.path === 'pages/entrance/login') { %>
<!-- Additional script, since this is the login page: -->
<script>alert('hey!');</script>
<% } %>
  顺便说一下,您也可以使用上述内容来有条件地包含Google Analytics等,因此您不会将测试请求作为实际生产流量进行跟踪 - 只需检查环境(我们的工作是什么)例如,在Sails网站上)。这对于有条件地包括/省略robots / noindex元标记(以防止在登台服务器上索引重复内容),帮助台聊天窗口小部件,typekit,其他分析服务等也很有用。

     

screenshot of conditionally adding either Google Analytics or robots noindex meta tag, depending on the hostname