2013-04-13 5 views
5

私のサーバーから返されるJSON応答には、長い文字列(メッセージ本文または複数行のメモ)が含まれています。ハンドルバーテンプレート内の複数行文字列の処理

典型的な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]タグ?レールで、私は、テンプレート内のロジックが好きではありません

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

答えて

4

ハンドルを(HAMLで)このようなものでこれを行うだろう。テンプレートにその配列を養う、その後

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}} 
関連する問題