【问题标题】:include ejs-partial into script tag (sails.js)将 ejs-partial 包含到脚本标记中 (sails.js)
【发布时间】:2013-10-02 05:47:36
【问题描述】:

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

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

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

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

但这里我有一个问题,代码无法识别视图文件夹,也无法识别我也尝试将部分文件复制到其中的资产文件夹。

这是我的 ajax 函数的代码 sn-p

<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>

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

【问题讨论】:

    标签: node.js ejs sails.js


    【解决方案1】:

    这里有一个例子可以帮助你到达你想去的地方。

    您可以将模板放在 /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 库添加到您的 assets/linker/js 目录中。

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

    【讨论】:

    • 感谢您的回答!我尝试了您的解决方案,但控制台告诉我未定义 JST
    • 最初创建项目时,是否使用了 --linker 参数?我的猜测是 grunt 没有找到模板。
    • 啊好吧,不,我没有使用 --linker 参数。但是我在我的 Gruntfile 中看到,它只加载带有 *.html 的模板。我将更改扩展名并查看它是否有效
    • @Vadorequest 这里是一个link 用于客户端示例的回购。
    • 请注意,Sailsjs v0.10.x 中不需要 --linker 参数,并且对 Gruntfile.js 的指示更改现在位于 tasks/pipeline.js。一如既往的好答案@JohnGalt。
    猜你喜欢
    • 2014-09-02
    • 1970-01-01
    • 2020-03-28
    • 2018-06-04
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    相关资源
    最近更新 更多