2014-09-05 26 views
2

考慮這個車把模板:如何在更換多行值時使把手保持縮進?

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

,後面的數據:

{ 
    content: 'foo\r\nbar' 
} 

和期望的結果(我需要):

<div> 
    foo 
    bar 
</div> 

但是編譯時車把帶模板我得到的數據如下:

<div> 
    foo 
bar 
</div> 

那麼,如何在更換多行值時使把手保持縮進? 當然,更改數據不是一種選擇。

回答

1

這是不可能的。把手不知道數據將被嵌入的地方。你在數據中有換行符,並且結果中有換行符,在foo之後沒有並且無處可得的選項卡(4個空格),只有一個換行符。

解決問題的方法之一就是使用這樣的幫助程序,它知道縮進並通過正確的方法處理參數。

查看快速示例。

助手:

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>中自動縮進格式化時我實際上發現了這個功能,我不得不禁用它)。

相關問題