Sails.js - 如何将js文件注入特定路由?

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代码,该代码不会被调用到被调用的视图中.