2012-05-09 2 views
3

Supose у меня есть этот простой, но довольно вложенную шаблон Eco:Как удалить ненужные пробелы из скомпилированного шаблона 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

Я не использовал Eco и не имею немедленной среды, чтобы попробовать что-либо. Вы видите, помогает ли включение нежелательных пробелов в '''? –

+0

Спасибо за предложение @AtesGoral, но, к сожалению, это не поможет, потому что пространства, видимые в JS, выводятся из-за отступов, используемых в шаблоне (я отредактировал мой вопрос, комментируя это). Прежде чем добавлять ненужные блоки комментариев HTML, я бы скорее удалил отступы шаблонов soruce, но это далеко не идеальное решение (вероятно, есть способ удалить их на время компиляции .eco -> .js). – epidemian

+0

Если Eco отличит XML-комментарии, он все равно может работать. Я напишу, что я имел в виду как ответ. –

ответ

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> 

Хотя, вам придется сделать выбор между этим безобразием или уродством отказа от отступа.

+2

Комментарии HTML также включены в вывод JS, а также в пробел. Eco заимствует синтаксис комментария от ERB: '<%# %>'. Эти комментарии не будут отображаться на выходе JS, но замена отступов на комментарии - это не-go для меня, это не то, что я ищу = D – epidemian

+0

Я слышу вас :) Но по крайней мере у вас есть последний способ использования Комментарии ЕРБ ... –

2

Что делать, если вы пишете как этот

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

как предложено в шаблонах ОЭС README, в записке о пробельных.