Frage Handhabung von mehrzeiligen Strings in einer Lenkerschablone


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

Eine typische message.body könnte etwa so aussehen:

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

Jetzt benutze ich den Lenker und bin so eingebettet

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

Dies ergibt jedoch in HTML:

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

Sincerely, 

Austin"</p>

Wie kann ich das bekommen, um jede einzelne Zeile innerhalb ihres eigenen HTML-Paragraphen [p] -Tags zu rendern? In Schienen würde ich das mit so etwas machen (in haml)

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

5
2018-04-13 00:47


Ursprung


Antworten:


Sie könnten einen Lenkstangenhelfer hinzufügen

http://handlebarsjs.com/expressions.html (scrolle runter zu 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 deinem Vorlagenanruf

{{paragraphSplit body}}

10
2017-07-31 15:53



Lenker mag keine Logik in der Vorlage. Normalerweise verarbeiten Sie Ihre Daten, bevor Ihre Vorlage sie in etwa so sieht:

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

und füttern Sie dann dieses Array mit der Vorlage:

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

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

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

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


4
2018-04-13 01:48