node.js - 将 ejs-partial 包含到脚本标记中 (sails.js)

标签 node.js ejs sails.js

函数,我想使用返回的数据渲染 EJS-Partial 或模板,最后将其附加到 DOM。我尝试过

var html = <%- partial('comment') %>"

但这给了我一个错误,我尝试使用这样的 EJS 模板

var html = new EJS({url: '/comment.ejs'}).render(comment);

但这里我遇到了问题,代码无法识别 View 文件夹或 Assets 文件夹,我也尝试将部分文件复制到其中。

这是我的 ajax 函数的代码片段

<script>
function postComment(){
   if ($('#inputContent').val() != ''){
       $.post( "/comment/create/", $('#commentForm').serializeArray(), function(comment) {
           //var html = new EJS({url: '/comment.ejs'}).render(comment);
           //var html = "<%- partial('comment') %>";
           $(html).appendTo('.comments').hide().fadeIn(2000);
           $('#inputContent').val('');
        });
   }
}
</script>

有人能解决我的问题吗?非常感谢

最佳答案

这是一个可能有助于您到达目的地的示例。

您可以将模板放在/assets/linker/template 目录中。当您使用 --linker 参数创建新的 sails 应用程序时,会创建链接器目录。因此,举例来说,假设我有一个名为:addUser.ejs 的模板文件,其中包含以下代码,它将用户添加到现有表中:

<tr data-id="<%- user.id %>" data-model="user">
        <% if (user.online) { %>
            <td><img src="./images/icon-online.png"></td>
        <% } else { %>
            <td> <img src="./images/icon-offline.png"></td>
        <% } %>
        <td><%= user.id %></td>
        <td><%- user.name %></td>
        <td><%- user.title %></td>
        <td><%- user.email %></td>
        <% if (user.admin) { %>
            <td> <img src="/images/admin.png"></td>
        <% } else { %>
            <td> <img src="/images/pawn.png"></td>
        <% } %> 
        <td><a href="/user/show/<%- user.id %>" class="btn btn-small btn-primary">Show</a></td>
        <td><a href="/user/edit/<%- user.id %>" class="btn btn-small btn-warning">Edit</a></td>
        <td><form action="/user/destroy/<%- user.id %>" method="POST">
            <input type="hidden" name="_method" value="delete"/>
            <input type="submit" class="btn btn-sm btn-danger" value="Delete"/>
            <input type="hidden" class="_csrf" name="_csrf" value="<%- _csrf %>" />
        </form></td>
    </tr> 

在本例中,我现在可以在/assets/linker/js 中包含的单独的 javascript 文件中使用该模板,其中包含以下内容:

$( 'tr:last' ).after(

  JST['assets/linker/templates/addUser.ejs']( obj )
);

因此,这采用模板并使用我随模板传入的 obj 来生成附加到 dom 中的所需 html。

编辑

此外,进入 Gruntfile.js 第 80 行左右应该是以下内容:

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

将 *.html 更改为 *.ejs。

最后,将 underscore.js 库添加到 asset/linker/js 目录中。

链接器目录结构也很重要。我相信无论您是否使用 --linker 指定,Gruntfile.js 都是相同的,因此请在名为 linker 的 Assets 目录下创建一个目录,其中包含 js、样式和模板的子目录。将 asset/js asset/styles 下的现有文件移至新链接器目录下。

关于node.js - 将 ejs-partial 包含到脚本标记中 (sails.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19025186/

相关文章:

javascript - 使用 DiscordJS 在聊天中获取表情符号图像的最佳方法是什么?

javascript - .replace() 在嵌入式 javascript 中不起作用

javascript - 如何使用expressJs将JS、CSS和其他服务器端实用程序包含到NodeJs中的HTML页面中?

node.js - 如何在一次操作中保存 SailsJS 中的多条记录?

mysql - var schemaAttributes = this.waterline.schema[this.identity].attributes ** Waterline 0.10.0 - Sails v0.9.16

node.js - 可选 $match 管道运算符的 Mongodb 聚合追加方法

node.js - Graphicsmagick Node 不写入 jpg

node.js - 在socket.io中获取消息发送者的客户端ID?

javascript - 如何区分 DOM 函数中使用的相同 div?

node.js - 一个迁移文件中的多个迁移语句