W moim dużym projekcie GWT mam ClientBundle dla moich zasobów graficznych. Zdefiniowałem w nim około 40 plików GIF. (Rozmiar każdego pliku jest o 5KB)Wzorzec dzielenia kodu GWT dla zasobów obrazu ClientBundle
Potem utworzyć klasę statyczną metodę ustalania właściwego obrazu do obj że dostać jako parametry:
public static void setImageFromId (String id,final Image img) {
//for 1.gif
if (id.equals("1")) {
GWT.runAsync(new RunAsyncCallback() {
@Override
public void onFailure(Throwable reason) {}
@Override
public void onSuccess() {
img.setResource(MyImages.INSTANCE.img1()); //MyImages is the ClientBundle
}
});
}
}
//for 2.gif
if (id.equals("2")) {
GWT.runAsync(new RunAsyncCallback() {
@Override
public void onFailure(Throwable reason) {}
@Override
public void onSuccess() {
img.setResource(MyImages.INSTANCE.img2()); //MyImages is the ClientBundle
}
});
}
//etc. for other images 3, 4, 5, ...
//...
}
Chcę wiedzieć, czy to dobry wzór do dzielenia kodu? ponieważ jeśli tego nie zrobię, wszystkie 40 plików zostanie zapisanych w pamięci podręcznej do przeglądarki klienta podczas pierwszego połączenia, ale nie jest to konieczne.
Rgds
Nie mogę cię zrozumieć! czy mógłbyś podać przykład? Jeśli tego nie zrobię, przy pierwszym wywołaniu "setImageFromId (..)" wszystkie zasoby zostaną pobrane jako x.cache.js (40 * 5KB = 200KB), a ja właśnie potrzebowałem jednego z nich (5KB) – Nav
Edytowałem moja odpowiedź, mam nadzieję, będzie bardziej klarowna. Daj mi znać, jeśli nie jest, lub jeśli okaże się, że to nie działa dla ciebie. –
masz na myśli w tych przypadkach powinienem uzyskać obrazy przez setUrl nie setResource? – Nav