2016-01-03 11 views
9

Chcę ujednolicić układ nawigacji dla mojej witryny, dlatego utworzyłem osobny plik HTML, który zawiera kod nawigacji. Używam JS, aby załadować plik DynamicznieMaterial Design Lite JS nie zastosowano do dynamicznie ładowanego pliku html

$("#navigation").load("/navigation/navigation.html", function() { 
    $.getScript('/material.min.js'); 
}); 

Problemem jest to, że material.min.js nie zostanie wykonany dla dynamicznie obciążonych elementów wewnątrz tej html i tracę jakąś kluczową funkcjonalność. Jak to naprawić?

Odpowiedz

2

Z oficjalnej docs:

Materiał Projekt Lite automatycznie zarejestruje i czynią wszystkie elementy oznaczone klasami MDL upon ładowania strony. Jednak w przypadku, gdy dynamicznie tworzysz elementy DOM, musisz zarejestrować nowe elementy za pomocą funkcji upgradeElement.

Załadowanie ponownie skryptu material.js nie spowoduje jego wykonania. Ale możesz zrobić kilka eksperymentów z upgradeElements, stosując go do całego załadowanego znacznika lub do poszczególnych elementów.

+0

Próbowałem tego na każdym elemencie potomnym, ale nie ma wyniku. Chyba czytałem gdzieś na githubie, że 'upgradeElement' nie działa dla klas layoutu, ale mogę się mylić ... – niko

+0

Szczerze mówiąc, zauważyłem, że przykład podany tutaj na dole: http://www.getmdl.io /started/index.html#dynamic nie działa, jeśli otworzysz podany link CodePen ... – niko

+0

Po prostu znalazłeś ciekawe zdanie jednego ze współpracowników MDL: _ Na razie MDL jest skierowany na strony zawierające treści statyczne. Dynamiczne dodawanie kart nie jest z pewnością pierwszorzędnym obywatelem pod względem wsparcia. Dlaczego nie wygenerujesz całego html po stronie serwera? –

17

Sprawdź, czy załadowany jest componentHandler i spróbuj zaktualizować elementy po załadowaniu.

if(!(typeof(componentHandler) == 'undefined')){ 
    componentHandler.upgradeAllRegistered(); 
} 

How the Component Handler works

W skrócie to podchodzi wszystkie zarejestrowane komponentów. Zapytania dla wszystkich węzłów z dostarczoną klasą CSS. Pętli nad nimi i tworzy ich instancje jeden po drugim. Po uaktualnieniu w węźle zaktualizowany obiekt zostanie dodany do zestawu danych. Ten obiekt zawiera rozdzieloną przecinkami listę składników składnika classAsString, aby zidentyfikować, które aktualizacje zostały wykonane.

+0

To działa dla mnie, dziękuję! – Rroman

Powiązane problemy