如何从已编译的Eco模板中删除不必要的空格

时间:2012-05-09 18:22:17

标签: javascript coffeescript sprockets eco

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来编译,连接和提供这些资产。

2 个答案:

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

但是,你必须在这种丑陋或放弃缩进的丑陋之间作出选择。