4

假设我有这个简单但相当嵌套的 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

顺便说一句,我正在使用 Sprockets 来编译、连接和服务这些资产。

4

2 回答 2

2

如果你这样写怎么办

<div class="example">
  <% for thing, i in @things: %>
    <div class="nested"><%= "fairly nested" if i % 2 is 0 %></div>
  <% end %>
</div>

正如 ECO 模板README中的建议,在关于空格的注释下。

于 2014-02-27T12:46:04.517 回答
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>

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

于 2012-05-09T19:07:16.153 回答