包括ejs-partial into script tag(sails.js)

时间:2013-09-26 10:02:40

标签: node.js ejs sails.js

函数,我想用返回的数据呈现EJS-Partial或Template,最后将它附加到DOM。我用

试了一下
var html = <%- partial('comment') %>"

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

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

但是我遇到了问题,代码无法识别视图文件夹,也没有识别我也尝试将部分文件复制到的资源文件夹。

以下是我的ajax-function

的代码片段
<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>

有没有人解决我的问题?非常感谢你

1 个答案:

答案 0 :(得分:3)

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

您可以将模板放在/ 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来生成所需的html,并将其附加到dom中。

修改

另外,进入第80行的Gruntfile.js应该是以下内容:

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

将* .html更改为* .ejs。

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

拥有链接器目录结构也很重要。我相信无论你是否使用--linker指定,Gruntfile.js都是相同的,所以使用js,styles和templates的子目录创建一个名为linker的资源目录。将assets / js assets / styles下的现有文件移动到新的链接器目录下。