2013-04-13 48 views
5

從我的服務器返回的JSON響應包含一個長字符串(消息正文或多行註釋)。處理Handlebars模板中的多行字符串

典型message.body可能是這個樣子:

"Hi!\r\n\r\nHow's life? Everything is well with me\r\n\r\nSincerely,\r\n\r\nAustin\r\n" 

現在使用的車把,我嵌入這樣

<p>{{body}}</p> 

然而,這使得這個在HTML:

<p>"Hi! 
How's life? Everything is well with me 

Sincerely, 

Austin"</p> 

我怎樣才能得到這個渲染每個單獨的行內自己的html段落[p]標籤?在軌,我會像這樣(在HAML)做到這一點

- note.body.each_line do |x| 
    %p= x 

回答

4

把手不喜歡模板中的邏輯。通常你處理你的數據的模板,像這樣看到它之前:

var lines = "...".split(/(?:\r\n)+/); 

再喂數組到模板:

var html = tmpl({ body: lines }); 

您的模板在這種情況下應該是這樣的:

{{#each body}} 
    {{.}} 
{{/each}} 

演示:http://jsfiddle.net/ambiguous/Gbu5w/

10

你可以添加一個車把s '的助手'

http://handlebarsjs.com/expressions.html (向下滾動到助手)

例如

Handlebars.registerHelper('paragraphSplit', function(plaintext) { 
    var i, output = '', 
     lines = plaintext.split(/\r\n|\r|\n/g); 
    for (i = 0; i < lines.length; i++) { 
     if(lines[i]) { 
      output += '<p>' + lines[i] + '</p>'; 
     } 
    } 
    return new Handlebars.SafeString(output); 
}); 
在你的模板調用

然後

{{paragraphSplit body}}