Przeczytaj ten tekst tylko wtedy, gdy przypisujesz podpowiedzi dynamicznie
to znaczy <div tooltip={{ obj.somePropertyThatMayChange }} ...></div>
Miałem problem z dynamicznymi podpowiedziami, które nie zawsze były aktualizowane wraz z widokiem. Na przykład robiłem coś takiego:
To nie działało konsekwentnie
<div ng-repeat="person in people">
<span data-toggle="tooltip" data-placement="top" title="{{ person.tooltip }}">
{{ person.name }}
</span>
</div>
I aktywując go tak:
$timeout(function() {
$(document).tooltip({ selector: '[data-toggle="tooltip"]'});
}, 1500)
Jednak ponieważ moja tablica ludzi zmieniłaby się, moje podpowiedzi nie zawsze byłyby aktualizowane. Próbowałem każdej poprawki w tym wątku i innych bez powodzenia. Wydawało się, że usterka występuje tylko w około 5% przypadków i była prawie niemożliwa do powtórzenia.
Niestety, te podpowiedzi mają kluczowe znaczenie dla mojego projektu, a wyświetlanie nieprawidłowych podpowiedzi może być bardzo złe.
Co wydawało się być problemem
Bootstrap kopiował wartość title
właściwości do nowego atrybutu data-original-title
i usuwał title
właściwość (czasami), gdy aktywowałem toooltips. Jednak gdy my title={{ person.tooltip }}
zmieniłby nową wartość, nie zawsze byłaby aktualizowana we właściwości data-original-title
. Próbowałem dezaktywować podpowiedzi i ponownie je aktywować, zniszczyć, powiązać bezpośrednio z tą właściwością ... wszystko. Jednak każdy z nich albo nie działał, albo stworzył nowe problemy; takie jak atrybuty title
i data-original-title
są usuwane i nie są związane z moim obiektem.
Co zadziałało
Być może najbardziej brzydki kod, jaki kiedykolwiek pchnąłem, ale rozwiązał ten mały, ale istotny problem. Uruchamiam ten kod za każdym razem, gdy podpowiedź jest aktualizowana o nowe dane:
$timeout(function() {
$('[data-toggle="tooltip"]').each(function(index) {
if ($(this).attr("title").length > 0) {
$( this ).attr("data-original-title", $(this).attr("title"));
}
});
$timeout(function() {
$(document).tooltip({ selector: '[data-toggle="tooltip"]'});
}, 500);
}, 1500);
Zasadniczo dzieje się tutaj:
- Poczekaj trochę czasu (1500 ms) na zakończenie cyklu podsumowania i
title
zaktualizowanie s.
- Jeśli istnieje
title
właściwość, która nie jest pusta (tj data-original-title
. Uległa zmianie), skopiuj ją do właściwości, aby została pobrana przez narzędzia Bootstrap.
- Ponownie aktywuj podpowiedzi
Mam nadzieję, że ta długa odpowiedź pomoże komuś, kto mógł walczyć tak jak ja.