2013-04-13 38 views
5

Phản hồi JSON được trả về từ máy chủ của tôi bao gồm chuỗi dài (nội dung thư hoặc ghi chú nhiều dòng).Xử lý các chuỗi đa luồng trong một mẫu Handlebars

Một message.body điển hình có thể giống như thế này:

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

Sử dụng tay lái bây giờ, tôi đang nhúng như thế này

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

Tuy nhiên, điều này làm cho thành này trong html:

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

Sincerely, 

Austin"</p> 

Tôi làm cách nào để hiển thị từng dòng riêng lẻ trong thẻ html [p] của riêng mình? Trong đường ray, tôi sẽ làm điều này với một cái gì đó như thế này (trong Haml)

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

Trả lời

4

tay lái không thích logic trong mẫu. Bạn thường xử lý dữ liệu của bạn trước khi mẫu của bạn nhìn thấy nó với một cái gì đó như thế này:

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

và sau đó ăn mảng trong từng mẫu:

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

Mẫu của bạn trong những trường hợp như vậy sẽ giống như thế này:

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

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

10

Bạn có thể thêm một tay lái s 'Helper'

http://handlebarsjs.com/expressions.html (di chuyển xuống Helpers)

ví dụ

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

Sau đó, trong mẫu cuộc gọi của bạn

{{paragraphSplit body}} 
Các vấn đề liên quan