使用ejs部分模板会破坏JSON.stringify

时间:2017-11-08 14:12:49

标签: json templates sails.js ejs serverside-rendering

我正在使用ejs模板在sails应用程序中进行服务器端渲染。在模板中,我发送脚本标记内的partial以在客户端使用,如下所示:

<div id="components">
    <% for (var idx = 0; idx < gallery.components.length; idx++) { %>
        <%- partial('partials/component', gallery.components[idx]) %>
    <% } %>
</div>

<script>
    var galleryObj = <%- JSON.stringify(gallery) %>;
</script>

这很好用。

但是,当我在模板中添加<div id="components"> <% var galleryJSON = JSON.stringify(gallery); %> <% for (var idx = 0; idx < gallery.components.length; idx++) { %> <%- partial('partials/component', gallery.components[idx]) %> <% } %> </div> <script> var galleryObj = <%- galleryJSON %>; </script> 更高时,JSON.stringify会抛出“循环对象”错误。因此,以下内容在模板文件中引发错误:

partial

但是,它适用于此修改:

include

显然,使用partial正在修改模板使用的库对象,但我不确定如何。

有助于调试的一些注意事项:

  • 模板中的gallery.components[idx]命令可能特定于使用来自sails应用程序的ejs。我认为“普通”ejs使用gallery来达到类似效果。
  • 每个createdAt都有一些与整个forEach对象的属性键匹配的属性键,例如const idMatch = { id: 'id2', id2: 'id3', id3: 'id4', id4: 'id5', id5: 'id6' }; Object.keys(idMatch).forEach((key) => { const nextKey = $('#' + idMatch[key]); const currentKey = $('#' + key); currentKey.click(function() { if (nextKey.is(":hidden")) { nextKey.slideDown("fast"); } }); }); 等。

谁能告诉我发生了什么?

0 个答案:

没有答案