Js *_*Lim 14 javascript inject node.js sails.js
例如,我有一个页面/locations/map
,我需要包含谷歌地图库,并包含专门为此页面的.js文件(例如location.js).
我想在<!--SCRIPTS END-->
这一行之后注入这两个文件
是否有可能做到这一点?
注意:我使用的是Sails.js v0.10
sgr*_*454 25
Sails ejs-locals
在其视图渲染中使用,因此您可以使用块完成所需的操作.
在您的layout.ejs
文件中<!--SCRIPTS END-->
,添加(例如):
<%- blocks.localScripts %>
Run Code Online (Sandbox Code Playgroud)
然后在您正在服务的视图中/locations/map
,使用脚本标记调用块,例如:
<% block('localScripts', '<script src="https://maps.googleapis.com/maps/api/js"></script>') %>
Run Code Online (Sandbox Code Playgroud)
或者,您可以将<!--SCRIPTS-->
和<!--SCRIPTS END-->
标记放在<head>
布局中,然后将特定于视图的脚本直接添加到视图中,而不是使用块.如果您不介意在显示页面内容之前等待加载这些链接脚本,这是一个很好的选择.
Fed*_*ire 13
Scott的答案是将非全局JS插入特定视图的正确方法.不过只是一点评论:block
来自视图的调用不应该有破折号.它应该如下:
<% block('localScripts', '<script src="https://maps.googleapis.com/maps/api/js"></script>') %>
两个调用都可以,但是使用短划线会使插入两次; 一旦加载了视图并且在布局渲染之前,然后在视图插入渲染的基础布局中时再次加载.如果插入的脚本依赖于基本布局中的库(例如jQuery,Backbone),这不仅会导致不必要地插入/运行两次相同的代码,还会导致破坏JS代码的错误.
EJS将魔术解释<%-
为"插入未转义".所以, - 我猜 - 这是在调用block()
函数,它返回我们的HTML <script>
标记.在魔术被调用的地方被替换,但也在执行block()
内部的函数,执行布局块localScripts
替换.
另一方面,<%
意思是"指令".即,只需运行这段JS代码,该代码不会被调用到被调用的视图中.