2014-09-05 3 views
2

Рассмотрим этот рули шаблон:Как заставить ручки сохранять отступы при замене многострочного значения?

<div> 
    {{content}} 
</div> 

И следующие данные:

{ 
    content: 'foo\r\nbar' 
} 

И желаемый результат (то, что мне нужно):

<div> 
    foo 
    bar 
</div> 

Но при компиляции рули шаблон с данные я получаю:

<div> 
    foo 
bar 
</div> 

Итак, как заставить ручки удерживать отступы при замене многострочного значения? Конечно, изменение данных не является вариантом.

ответ

1

Невозможно. Рульщики ничего не знали о месте, где будут внедрены данные. У вас есть разрыв строки в данных, и вы получаете разрыв строки в результате, нет и нигде не получить вкладку (4 пробела) после foo, иметь только один разрыв строки.

Одним из способов решения вашей проблемы является использование такого помощника, который знает об отступлении и правильном пути прохождения аргумента.

См. Быстрый пример.

Helper:

Handlebars.registerHelper('indent', function (data, indent) { 
    var out = data.replace(/\n/g, '\n' + indent); 
    return new Handlebars.SafeString(out); 
}); 

используется как:

{{indent foo ' '}} 

даст вам многострочный вывод с заданным отступом.

3

От the compile reference:

preventIndent: По умолчанию отступа частичного вызов вызывает выход всех частичные будучи отступ на ту же сумму. Это может привести к неожиданному поведению, когда частичные записи предварительных тегов. Установка этой опции на true отключит функцию автоматического отступа.

Таким образом, отсюда следует, что если вы можете настроить шаблон так, чтобы content визуализируется частичным, например:

<div> 
    {{> ContentPartial}} 
</div> 

Тогда, прежде чем он оказывается, register the ContentPartial partial:

Handlebars.registerPartial('ContentPartial', '{{content}}') 

тогда он сохранит отступы. (Я действительно обнаружил эту функцию, когда автоотчерпывание прикручивало форматирование в моем <textarea>, и мне пришлось отключить его).

Смежные вопросы