2011-11-01 36 views
10

Tôi có một tiện ích phụ thuộc vào một số tệp JS bên ngoài và tôi muốn tải xuống tất cả các tài nguyên bên ngoài này một cách lười biếng. Tôi đã sử dụng phân tách mã để tải xuống mã GWT có liên quan đến tiện ích con, nhưng các tệp JS được định nghĩa trong gwt.xml, sử dụng thẻ script, vẫn được tải, điều này không được mong muốn.GWT: hoãn tải các tài nguyên JS bên ngoài

Có cách tải GWT tiêu chuẩn nào để tải các tài nguyên bên ngoài này theo yêu cầu không? Tôi có thể tự mình làm bằng cách sử dụng JS thô, nhưng tôi không muốn dành thời gian cho việc này nữa.

+0

Thậm chí còn có nhiều cuộc thảo luận hơn về nhóm Google GWT: ["Cách đưa các thư viện Javascript của bên thứ ba vào thư viện/tiện ích gwt có thể sử dụng lại được?"] (Https://groups.google.com/d/topic/ google-web-toolkit/Xiz8XmPhJzo/thảo luận) – blong

Trả lời

16

Tôi nghĩ bạn sẽ muốn xem qua lớp com.google.gwt.core.client.ScriptInjector. From the javadocs:

Tự động tạo thẻ tập lệnh và đính kèm thẻ vào DOM.

...

sử dụng cho phép script nạp ở dạng 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(); 

Mã này tất nhiên có thể được gọi từ bên trong điểm chia của bạn, hoặc thực sự bất cứ nơi nào trong mã của bạn.

+0

Tuyệt vời! Cảm ơn Colin. Mặc dù, bây giờ tôi sẽ phải di chuyển từ 2,3 đến 2,4 :) Tôi sẽ xem nó như thế nào. –

+1

2.3 đến 2.4 không phải là một vấn đề lớn, nhưng nếu có, bạn có thể xem ScriptInjector.fromUrl hoạt động như thế nào với ScriptElement và bạn có thể xây dựng nó vào ứng dụng mà không cần nâng cấp. –

1

ScriptInjector khá di động. Nó không có bất kỳ phụ thuộc bên ngoài, vì vậy bạn sẽ có thể backport nó vào ứng dụng 2.3 của bạn mà không có nhiều vấn đề.

Các vấn đề liên quan