2013-09-26 71 views
2

函数,我想渲染一个带有返回数据的EJS-Partial或Template,最后将它附加到DOM。我包含ejs-partial脚本标记(sails.js)

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

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

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

但在这里我有问题,该代码不承认的观点文件夹或资产文件夹,我也尝试将我的部分文件复制到其中。

这里是我的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> 

的代码片段有没有人对我的问题的解决方案?非常感谢你

回答

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> 

我现在可以使用该模板,在这个例子中,在包含在/资产/连接/ 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库添加到assets/linker/js目录。

链接器目录结构也很重要。我相信Gruntfile.js是相同的,无论您是否使用--linker指定,请使用js,styles和templates的子目录关闭名为linker的资产目录。在新的链接目录下移动assets/js assets/styles下的现有文件。

+0

谢谢你的回答!我试过你的解决方案,但控制台告诉我JST没有定义 – vacetahanna

+1

当你最初创建你的项目时,你是否使用了--linker参数?我的猜测是,咕噜声没有找到模板。 – JohnGalt

+0

好的,不,我没有使用--linker参数。但是我在我的Gruntfile中看到,它只加载带有* .html的模板。我将更改扩展名并查看它是否可以工作 – vacetahanna