在Sails.js應用程序中,如何選擇性地包含JavaScript資源?
我有選擇地使用assets.js()包裝器加載js資產。這段代碼使用Jade的「 - 」和「!{...}」。 EJS將改用 「<%...%>」 和 「<%= ...%>」
<!-- JavaScript and stylesheets from your assets folder are included here -->
!{assets.css()}
-function selectAssets (assetsjs, files, ifInclude) {
- return assetsjs.split('\n').reduce(function (prev, curr, i) {
- var frag = curr.match(/src="\/assets\/js\/\w{1,}\-/);
- if(frag) {
- var file = frag[0].substring(16, frag[0].length - 1);
- if ((files.indexOf(file) === -1) == ifInclude) { return prev; }
- }
- return prev + curr + '\n';
- }, '');
-}
//!{assets.js()} this line is replaced by:
!{selectAssets(assets.js(), ['dummy1', 'dummy5', 'dummy6'], false)}
上面將不包括/assets/js/dummy1.js,dummy5,dummy6與佈局。如果您想在特定頁面上包含dummy1和dummy5,您應該在該頁面上放置
!{selectAssets(assets.js(), ['dummy1', 'dummy5'], true)}
。
注意:代碼假定文件名不包含「 - 」。其直接推廣爲CSS和模板。 sails-io是mixin的特例。
在管理模板中添加條件仍然會導致腳本在** sails.io.js腳本之前被加載**。我如何得到它後加載?我是否必須將'<% - assets.js()%>'行從layout.ejs移出到我的管理模板中?那會導致我必須對我所有的觀點都這樣做。 – albiabia
林不知道,但我認爲socketio首先加載。也許你可以添加一個監聽器來檢查socketio是否已經加載。 – bwaaaaaa