Хорошо, у меня есть меню привязок Semantic UI в приложении Ember, которое мне нужно обновить после полной визуализации страницы, потому что в данный момент она выпрыгивает или прокручивается из границы при изменении высоты документа.
setTimeout(function(){
$('.ui.sticky').sticky({
offset: 60,
observeChanges: true,
silent: true
});
},2000);
Он заключен в setTimeout () для ожидания загрузки содержимого документа, что, казалось, было единственным обходным решением в то время. Также предполагается обновлять каждый раз, когда содержимое добавляется или удаляется из столбца, например, когда изображение документа загружается по истечении времени ожидания или когда один из аккордеонов открывается / закрывается пользователем. Для достижения этой цели я попытался
$('.document-content.column').attr('onresize', "$('.ui.sticky').sticky('refresh')");
чтобы отследить изменения в размере элемента. К сожалению, это работает только при изменении размера окна. Как я уже выяснил, после загрузки изображений событие не срабатывает, поэтому я попытался прослушать изменения элемента DOM с помощью DOMSubtreeModified.
$('.document-content.column').bind('DOMSubtreeModified', function() {
$('.ui.sticky').sticky('refresh');
});
Это прекрасно работает, а также заменяет грязное решение для тайм-аута, но оно очень медленно при начальной загрузке страницы, так как срабатывает несколько раз. Также DOMSubtreeModified считается устаревшим, поэтому я попробовал MutationObservers следующим образом:
var observer = new MutationObserver(function() {
$('.ui.sticky').sticky('refresh');
});
var observerTarget = document.querySelector('.document-content.column');
var observerOptions = {
attributes: true,
childList: true,
subtree: true
};
observer.observe(observerTarget, observerOptions);
Но похоже, что каждое обновление липкой просто снова вызывает наблюдателя, вызывая бесконечный цикл. И теперь я не знаю, что еще делать.
Краткая версия шаблона hbs:
<div class="ui stackable three column container relaxed grid">
<div class="twothird wide document-content column">
{{image-loader}}
<div class="ui divider"></div>
<h2 class="cap text">{{text}}</h2>
<div class="ui relaxed divided accordion">
<div class="title"></div>
<div class="content"></div>
</div>
</div>
<div class="widescreen large screen computer only column">
<div class="ui sticky rail-menu">
{{document-sidebar}}
</div>
</div>
</div>
Если есть что-то еще, что я должен предоставить, пожалуйста, скажите мне. Я благодарен за любую помощь, которую я могу получить.