2011-11-01 20 views
10

Bazı harici JS dosyalarına bağlı olarak bir widget'ım var ve tüm bu harici kaynakları tembel yüklemek istiyorum. Önceden yüklemeyi yapmak için kod bölme özelliğini zaten kullanmak istedim, ancak widget ile ilgili olan GWT kodu, ancak script etiketini kullanarak gwt.xml dosyasında tanımlanmış olan JS dosyaları zaten yüklü değil, bu da istenmiyor.GWT: dış JS kaynaklarının ertelenmiş yüklemesi

Bu harici kaynakları isteğe göre yüklemek için standart bir GWT yolu var mı? Kendimi ham JS kullanarak yapabilirim, ama bunun için de zaman harcamam.

+0

GWT Google grubunda bu konuyla ilgili daha fazla tartışma var: ["Üçüncü parti Javascript kitaplıklarını yeniden kullanılabilir bir gwt kitaplığı/pencere parçasına nasıl ekleyebilirim?"] (Https://groups.google.com/d/topic/ google-web-toolkit/Xiz8XmPhJzo/tartışma) – blong

cevap

16

Bence com.google.gwt.core.client.ScriptInjector sınıfına göz atmak istersiniz. From the javadocs:

Dinamik bir komut dosyası etiketi oluşturmak ve DOM ekleyin. URL olarak yüklenen komut dosyası ile

...

Kullanımı:

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

Bu kod

elbette bölünmüş puan içinden çağrılabilir veya gerçekten her yerde kodunda olabilir.

+0

Parlak! Teşekkürler Colin. Yine de şimdi 2.3'ten 2.4'e geçmek zorunda kalacağım :) Nasıl olacağını göreceğim. –

+1

2.3 ila 2.4 büyük bir anlaşma olmamalı, ancak eğer böyle bir durumda, ScriptInjector.fromUrl ile ScriptElement ile nasıl çalıştığına bakabilirsiniz ve bunu yükseltmeden uygulamanıza ekleyebilirsiniz. –

1

ScriptInjector oldukça taşınabilirdir. Harici bağımlılıkları yoktur, bu yüzden 2.3 uygulamanıza çok fazla sorun olmadan geri dönebilmeniz gerekir.