Я создаю приложение Emberjs, и у меня есть элемент HTML, который содержит текст, который часто переполняет элемент, поэтому я хочу усечь текст и добавить эллипсы.Emberjs - взаимодействовать с представлением после полной загрузки
Вот мой HTML элемент и CSS:
<div class="elementClass">{{textValue}}</div>
.elementClass {
height: 100px;
}
Вот функция JavaScript Я использую, чтобы обрезать последние три символа текста, пока scrollHeight больше не больше, чем высота:
function truncateElementText($element) {
var html = $element.html();
if ($element.height() < $element.prop('scrollHeight')) {
$element.html(html.substring(html.length - 3, html.length) + '…');
truncateElementText($element);
}
}
Вот что Emberjs просмотра я использую для вызова truncateElementText на элемент, который я хочу обрезать:
App.MyView = Ember.View.extend({
didInsertElement: function() {
Ember.run.scheduleOnce('afterRender', this, function() {
var $element = $('.elementClass');
truncateElementText($element);
});
}
});
Проблема заключается в том, что truncateElementText, похоже, выполняется до того, как он получит доступ к элементу $. Он не обрезает $ element в первый раз, когда загружается страница, но он обрезает $ element, если я обновляю браузер. Если я сделаю console.log ($ element.html()) в начале didInsertElement, я вижу, что в этот момент у него есть элемент и его HTML, так что это не похоже на то, что $ element недоступен в DOM, когда я выберите его и передайте его функции.
Если я использую setTimeout для задержки truncateElementText на 50 миллисекунд, он работает каждый раз, даже в первый раз, когда страница загружается.
Я новичок в Ember, поэтому любой и все советы будут очень признательны.
Спасибо!
Спасибо, это хорошее предложение, но я должен поддерживать IE8, и текст должен быть многострочным. :( – benihana21