директивы скорости тоже добавляют пробел? - PullRequest
7 голосов
/ 13 декабря 2011

Я только что узнал, что со скоростью apache директивы также добавляют к пробелам.

Так, например:

#foreach ($record in $rows)
#foreach($value in $record)
$value  
#end

#end

С чем-то вроде этого я получаю дополнительные строкидля операторов #foreach, операторов #end и т. д.

Это не то, что я хочу, поэтому я обнаружил, что могу блокировать комментарии в конце строк следующим образом:

#foreach ($record in $rows)#*
*##foreach($value in $record)#*
*#$value    #*
*##end

#end

Но это довольно уродливо читать.Есть ли способ заставить двигатель скорости не форматировать мои директивы?

Может, я делаю что-то не так?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 23 декабря 2011

Я думаю, что вы застряли с этим (см. Velocity Whitespace Gobbling статья), хотя строчные комментарии были бы немного более аккуратными:

#foreach ($record in $rows)##
#foreach($value in $record)##
$value    ##
#end

#end

Или вы можете просто сжать все в одну строку:

#foreach($record in $rows)#foreach($value in $record)${value}#{end}#{end}
1 голос
/ 23 декабря 2011

Это на самом деле характерно почти для всех языков шаблонов, и рассуждения исходят непосредственно из упрощенной обработки.Рассмотрим следующий пример ( это на самом деле GSP, используемый Grails, но идея та же ):

<g:each var="x" in="exes">
    ${x.y}
</g:each>

Способ, которым это обрабатывается, заключается в том, что сначала тег ( илив случае Velocity указана директива ).Поскольку сам тег / директива содержит инструкции для обработки тела тега, метки тега / директивы удаляются, и весь контент сразу после начальной метки и непосредственно перед конечной меткой используется в качестве цели для обработки.Это включает в себя все пробелы, потому что очистить вывод заранее было бы намного сложнее.

Это, конечно, не означает, что вы не можете сделать это, как указывает Эдд, или что это будет наиболееПрежде всего, разумный выбор дизайна, но иногда делать вещи проще, чем создавать красивую разметку - в конце концов, большинству, если не всем процессорам разметки, на самом деле все равно, если у вас <p>some\ncontent</p> или <p>some\n\n\n\t\tcontent</p>.

...