Supose我有这个简单但相当嵌套的Eco模板:
<div class="example">
<% for thing, i in @things: %>
<div class="nested">
<% if i % 2 == 0: %>
This block is fairly nested.
<% end %>
</div>
<% end %>
</div>
编译为JS时,结果为:
function(__obj) {
// ... A couple of auxiliary functions ...
(function() {
(function() {
var i, thing, _i, _len, _ref;
__out.push('<div class="example">\n ');
_ref = this.things;
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
thing = _ref[i];
__out.push('\n <div class="nested">\n ');
if (i % 2 === 0) {
__out.push('\n This block is fairly nested.\n ');
}
__out.push('\n </div>\n ');
}
__out.push('\n</div>\n');
}).call(this);
}).call(__obj);
__obj.safe = __objSafe, __obj.escape = __escape;
return __out.join('');
}
现在,这个函数(作为客户端的JS进行客户端渲染)包括一些字符串上不必要的空格,比如...
`'\n This block is fairly nested.\n '`
... JS压缩器无法删除它,因为它们不是JS空格(但在渲染时变为HTML空格)。我理解Eco以这种方式编译模板以保持其输出很好地缩进,这在开发环境中很酷,但在生产环境中却没有那么多:D
有没有办法从eco.precompile
输出中删除这些不必要的空格?
BTW,我正在使用Sprockets来编译,连接和提供这些资产。
答案 0 :(得分:2)
如果你这样写的话怎么办
<div class="example">
<% for thing, i in @things: %>
<div class="nested"><%= "fairly nested" if i % 2 is 0 %></div>
<% end %>
</div>
按照ECO模板README中的建议,在关于空格的说明下。
答案 1 :(得分:0)
如果Eco尊重XML评论,这可能会有所帮助:
<div class="example">
<% for thing, i in @things: %><!--
--><div class="nested"><!--
--><% if i % 2 == 0: %>
This block is fairly nested.
<% end %>
</div>
<% end %>
</div>
但是,你必须在这种丑陋或放弃缩进的丑陋之间作出选择。