2012-05-18 3 views
1

У меня есть текстовое поле, привязанное к div, так что все, что вы вводите в текстовом поле, обновляет div.Bind TextArea linebreaks to html

Единственное, что привязки не уважают, это символы новой строки в textarea, поэтому, если вы нажмете «ввести» в textarea, div не получит перерыв.

Fiddle: http://jsfiddle.net/lifeinafolder/Ajkyw/19/

Я использую помощник, и он не работает.

Согласно пункту 4 по этой ссылке: http://codebrief.com/2012/03/eight-ember-dot-js-gotchas-with-workarounds/, он не должен работать. Но даже с решением по этой ссылке я не могу заставить его работать.

Любые идеи о том, как обновить div с помощью <br/> тегов на линиях в текстовом поле?

ответ

7

Используйте вычисленное свойство для форматирования разрывов строки местоположения.

HTML:

<script type="text/x-handlebars"> 
    {{#with App.obj}} 
     {{view Ember.TextArea valueBinding="location"}} 
     <div>{{{formattedLocation}}}</div> 
    {{/with}} 
</script> 

JavaScript:

App.obj = Ember.Object.create({ 
    location:'Palo Alto', 

    formattedLocation: function() { 
     return this.get('location').replace(/\n\r?/g, '<br />'); 
    }.property('location').cacheable() 
}); 

http://jsfiddle.net/e8G2j/

В примере я удалил свой помощник, так что это будет немного легче следовать точно, что происходит. Если вам нужно использовать помощника и не можете понять это, дайте мне знать, и я снова добавлю помощника.

+0

Я тоже пробовал этот подход, но мои ярлыки br ускорялись. Я заметил, что вы обертываете 3 parens aka {{{location}}} вместо 2, что нормально. Ссылка на ссылку/документацию на 3 parens? – Rajat

+1

Получил это. Документация Handlebars рассказывает о трюке с тройным усом: http://handlebarsjs.com/ – Rajat

+4

Не думаю, что очень удобно использовать «тройной сташ» {{{}}}, так как контент может содержать HTML/JS, открывая сайт для уязвимостей. Я бы рекомендовал использовать такой помощник: https://gist.github.com/lagartoflojo/6090175. Сначала этот фрагмент выходит из содержимого, а затем заменяет \ n \ r на
. –