13

Underscore şablonunu (John Resig's Microtemplate temel alınarak) kullanıyorum ve satır içi satırları değiştirmeye çalıştığımda, garip davranışlar alıyorum. Ben alt çizgi içindeki satır sonları yerini çalışırsanız, ancakUnderscore/Microtemplate Satır Sonlarını Değiştir - Garip Davranış

$('#example1_no_template').html(message.replace(/\r?\n/g, '<br />')); 

: eğer bunu yaparsam

var message = 'Line1\r\n\r\nLine2'; 

düzgün hattı yerini br etiketleriyle kırar: Örneğin, böyle metni varsa aşağıdaki örnek kod ile şablon, herhangi br etiketleri takılı alamadım:

<script id="template1" type="text/html"> 
    <%= message.replace(/\r?\n/g, '<br />') %> 
</script> 

<script> 
var template1 = _.template($('#template1').html()); 
$('#example1_template').html(template1({ message: message })); 
</script> 

Ve garip, ben aşağıdakilere şablonun içinde benim normal ifadeyi değiştirmek eğer, o zaman ben br etiketlerinin her türlü almak i Her yerde nserted:

<script id="template3" type="text/html"> 
    <%= message.replace(/[\r\n?]/g, '<br /><br />') %> 
</script> 

bu davranışların tümü bu keman gösterilmiştir: http://jsfiddle.net/GHtDY/5/

neler fikrin var mı? Şablon içindeki satır sonlarını değiştirmek mümkün mü?

cevap

8

Underscore'un şablon ayrıştırıcısının bir yerde bir hataya sahip olup olmadığını merak ediyorum. Bunun yerine regex değişmez sözdizimi RegExp nesne sözdizimini kullanıyorsanız: http://jsfiddle.net/ambiguous/GHtDY/6/

Sizin "korkak çıktı" örnek:

<%= message.replace(/[\r\n?]/g, '<br /><br />') %> 

geliyor sonra

<script id="template1" type="text/html"> 
    <%= message.replace(new RegExp('\r?\n', 'g'), '<br />') %> 
</script> 

beklediğiniz sonuçları almaya başlamak out funky çünkü n öğelerini <br> öğelerinizle değiştirin. Her neyse, bu karakter sınıfının herhangi bir tek CR, LF veya soru işareti ile eşleşmesi gerekiyor ve bu zaten yapmaya çalıştığınız şey değil.

Underscore'un şablon ayrıştırıcısının bazı normal ifadeler ile bazı sorunları olduğunu sanıyorum; /\s/g'un da beklendiği gibi çalışmadığını fark edeceksiniz. Özellikle, bir regex değişmezi içinde \r ve \s gibi çıkış sıralarını ayrıştırmada bazı sorunların olduğu görülmektedir. Örneğin, bu: message bazı basamak içeren ancak beklendiği gibi new RegExp

<script id="template1" type="text/html"> 
    <%= message.replace(new RegExp('\d', 'g'), '<br /><br />') %> 
</script> 

çalışır kullanırken beklendiği gibi

<script id="template1" type="text/html"> 
    <%= message.replace(/\d/g, '<br /><br />') %> 
</script> 

çalışmaz.

+0

Mükemmel bir açıklama. Teşekkür ederim. –