2013-04-13 4 views
5

Die von meinem Server zurückgegebene JSON-Antwort enthält eine lange Zeichenfolge (einen Nachrichtentext oder eine mehrzeilige Notiz).Behandeln von mehrzeiligen Zeichenfolgen in einer Griffleiste

Ein typisches message.body etwas könnte wie folgt aussehen:

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

Lenker verwenden, ich bin wie diese jedoch

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

Einbettung, macht dies das in in html:

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

Sincerely, 

Austin"</p> 

Wie kann ich dies erhalten, um jede einzelne Zeile in ihr zu rendern eigene HTML-Absatz [p] -Tag? In Schienen, ich würde das so etwas tun (in haml)

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

Antwort

4

Lenker Logik in der Vorlage nicht mag. Sie verarbeiten in der Regel Ihre Daten, bevor Sie Ihre Vorlage mit so etwas wie dies sieht:

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

und füttern dann das Array an der Vorlage:

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

Ihre Vorlage in solchen Fällen würde wie folgt aussehen:

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

Demo: http://jsfiddle.net/ambiguous/Gbu5w/

10

Sie könnten einen Lenker hinzufügen s 'Helfer'

http://handlebarsjs.com/expressions.html (nach unten scrollen, um Helfer)

z.B.

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); 
}); 

Dann in Ihrer Vorlage Anruf

{{paragraphSplit body}} 
Verwandte Themen