2011-11-01 16 views
10

Mam widget w zależności od niektórych zewnętrznych plików JS, a ja chciałbym leniwy załadować wszystkie te zasoby zewnętrzne. Użyłem już podziału kodu do leniwego załadowania kodu GWT, który dotyczy widżetu, ale pliki JS zdefiniowane w pliku gwt.xml, przy użyciu tagu script, są wczytywane i tak nie jest pożądane.GWT: odroczone ładowanie zewnętrznych zasobów JS

Czy istnieje standardowy sposób GWT ładowania tych zasobów zewnętrznych na żądanie? Mogę to zrobić sam, używając surowego JS, ale wolałbym nie spędzać czasu na tym.

+0

Jest jeszcze więcej dyskusji na ten temat w grupie GWT Google: ["Jak uwzględnić biblioteki stron trzecich w bibliotece wielokrotnego użytku gwt/widżecie?"] (Https://groups.google.com/d/topic/ google-web-toolkit/Xiz8XmPhJzo/dyskusja) – blong

Odpowiedz

16

Myślę, że będziesz chciał rzucić okiem na klasę com.google.gwt.core.client.ScriptInjector. From the javadocs:

Dynamicznie utwórz znacznik skryptu i dołącz go do DOM.

...

Wykorzystanie ze skryptu załadowanego jako URL:

ScriptInjector.fromUrl("http://example.com/foo.js").setCallback(
    new Callback<Void, Exception>() { 
     public void onFailure(Exception reason) { 
      Window.alert("Script load failed."); 
     } 
     public void onSuccess(Void result) { 
      Window.alert("Script load success."); 
     } 
    }).inject(); 

Kod ten może oczywiście być wywoływany z poziomu podziału punktów, czy rzeczywiście nigdzie w kodzie.

+0

Genialny! Dzięki Colin. Chociaż teraz będę musiał przeprowadzić migrację z wersji 2.3 do 2.4 :) Zobaczę jak to działa. –

+1

2,3 do 2,4 nie powinno być wielkim problemem, ale jeśli tak jest, możesz przyjrzeć się, w jaki sposób ScriptInjector.fromUrl działa z ScriptElement, i możesz go zbudować w swojej aplikacji bez aktualizacji. –

1

ScriptInjector jest dość przenośny. Nie ma żadnych zewnętrznych zależności, więc powinieneś być w stanie wykonać jego powrót do aplikacji 2.3 bez większego problemu.

Powiązane problemy