在 Sails.js 中使用客户端模板

Using Client-side Templates in Sails.js

我是 Sails.js

的新手

我正在尝试使用 sails 中的 assets/templates 功能来呈现数据客户端,但我似乎找不到任何可用的示例。

我正在寻找没有 angular 或其他框架的原生 Sails 解决方案。只需从 assets/templates 加载 .JST 模板并使用 jQuery

填充它们

Can anyone reference a working example of using client-side templates in sails.js?

你在 layout.ejs 中定义了 ng-app 和 ng-view 了吗?如果您定义然后在 /assets 中使用路由创建一个 angular app.js,那么这肯定会起作用。 如果还有任何问题,请告诉我。

这个文档真的很缺乏。但是,我通过以下步骤设法让客户端模板在 Sails 0.12.4 中工作:

1。先决条件

默认安装时,您应该已经有一个文件 views/homepage.ejs,其中包含模板部分:

...
<!--TEMPLATES-->
<!--TEMPLATES END-->
...

现在,运行 $ sails liftassets/templates/ 下的模板编译成 javascript 文件 jst.js,然后自动插入 [=15] =] 在模板部分注释标签之间。但是,我们首先需要一个模板!

2。 EJS 模板

写一个模板文件,比如assets/templates/example.ejs:

<h1><%= message %></h1>

有一个问题。默认情况下,Sails 仅编译以 *.html 结尾的模板。这没有意义,因为模板文件显然不是 HTML,也因为 views/ 下的服务器端模板已经具有扩展名 .ejs。要更改它,请替换 tasks/pipeline.js 中的以下行:

var templateFilesToInject = [
  'templates/**/*.html'
];

var templateFilesToInject = [
  'templates/**/*.ejs'
];

这使我们的 example.ejs 可以作为 javascript 函数编译到 jst.js 中。

3。定义 _

这还不够。 jst.js中编译的javascript依赖于Underscore or alternatively Lodash。客户端命名空间中没有_,执行模板函数会报错

要在客户端导入它,请下载您选择的版本并将其放在 assets/js/dependencies/ 下。例如,缩小的 Lodash 核心似乎就足够了。在接下来 sails lift 期间,该文件的新脚本标记将自动插入 homepage.ejs,最终将 _ 放入命名空间。

4。渲染模板

运行 $ sails lift 并默认浏览至 localhost:1337 的主页。 jst.js 已在 window.JST['assets/templates/example.ejs'] 创建了模板函数。

要实际测试它,请打开开发人员控制台,然后键入:

> window.JST['assets/templates/example.ejs']({message: 'Hello'})

这应该 return 你的字符串 <h1>Hello</h1>。您现在要将此字符串插入到文档的某处。假设您将它存储到一个变量 piece 中。您可以使用 jQuery $('#target').html(piece) 或旧的 document.getElementById('target').innerHTML = piece。无论如何,结果,呈现的字符串现在被插入到#target 元素下的页面中。