2010-11-20 14 views

Odpowiedz

6

W GWT 2.4 dodaje ScriptInjector http://gwt-code-reviews.appspot.com/1451818/

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(); 
+0

Whoa. Wygląda na to, że przeszła długą drogę od 1.6: D –

2

Jeśli licencja na to pozwala, możesz skopiować i wkleić cały kod JS biblioteki w metodę JSNI.

Można również użyć TextResource takiego:

public static interface Resources extends ClientBundle { 
    @Source("some.js") 
    TextResource someJs(); 
} 

public void onModuleLoad() { 
    final Resources resources = GWT.create(Resources.class); 
    eval(resources.someJs().getText()); 
} 

private static native void eval(String s) /*-{ 
    eval(s); 
}-*/; 

tekście „some.js” zostanie internowany bezpośrednio do otrzymanego wniosku. Nie będzie żadnego osobnego pobierania.

+0

Tak, mogłem, ale naprawdę chcę coś szczuplejsze. Możliwe, że pliki zostały przeniesione podczas kompilacji jako zależność. –

+0

@Sudhir: W pełni to rozumiem. Jednak gwtc to tylko kompilator/konwerter Java do JavaScript, który może dodatkowo zawierać JavaScript przez JSNI. Więc nie widzę bezpośredniego sposobu. Może możesz zbudować rozwiązanie pośrednie w ten sposób: Dodaj kod JS jako TextResource (ClientBundle), a następnie oceń tekst w JSNI. Jeszcze tego nie próbowałem! –

+0

W tej chwili może oznaczyć plik js jako zasób skryptu i upewnić się, że został pobrany przed uruchomieniem modułu. Próbuję sprawdzić, czy ktokolwiek zna sposób, w jaki mogę powiedzieć GWT, aby umieścić ten plik w samym module. Wciąż robiłoby dokładnie to samo, z mniejszą liczbą próśb. –

0

Czy urządzenie gwt-maps-utility project jest przydatne do Twoich potrzeb?

+0

Nie, jestem na v3 i nikt nie wydaje się mieć portu GWT narzędzi dla v3 jeszcze :( –

8

Można zdefiniować ClientBundle do zasobów JavaScript tak:

public interface JsResources extends ClientBundle { 
    final JsResources INSTANCE = GWT.create(JsResources.class); 

    @Source("myAwesomeJavaScript.js") 
    TextResource myAwesomeJavaScript(); 
} 

i umieścić go w swojej aplikacji z ScriptInjector:

ScriptInjector 
    .fromString(JsResources.INSTANCE.myAwesomeJavaScript().getText()) 
    .inject(); 
+3

imo to jest najlepsze rozwiązanie, łącząc js w źródło tekstowe zmniejszy dodatkowe żądanie http, aby załadować js. –