2010-02-25 7 views
10

Siparişler adlı bir sayfam ve OrderDetails adlı bir sayfam var. Mükemmel MVP tutorial'da açıklandığı gibi Tarih (bir ValueChangeListener ile) ve bir "olay veriyolu" HandlerManager ile çalışıyorum.Parametreleri geçirmek için GWT Geçmişi'ni mi kullanıyorsunuz?

Bir siparişi tıklattığında, bir siparişi tıklattıran, ancak OrderDetailPresenter öğesini oluşturan sipariş numarasına (ShowOrderDetailEvent öğesinde yer alan) geçen bir işleyicim var ve History.newItem("orderDetails") numaralı telefonu arayın.

Bu birkaç önemli dezavantajı vardır: Bu yeni oluşturulan Tarih adım geçirildi hangi sırayla kimliği bilmeyen birine sipariş ayrıntıları sayfaya yer işareti (veya tarayıcılarında ileri geri gider) örneğin, bundan haberleri Yani. Sipariş detayı olmayan boş bir sayfa alacaksınız.

Benim soru: Ben yerine History.newItem("orderDetails?id="+id) böyle bir şey yapmak ve sonra benim değer değişikliği dinleyici tarih belirteci ayrıştırmak mı? Öyleyse, argümanları bu şekilde bir dizeye ayrıştırmak ve biçimlendirmek için en iyi uygulama, bir API veya kitaplık var mı?

cevap

9

Evet, yapmanız gereken bu. Bildiğim kadarıyla, bunu kolaylaştırmak için kütüphane yok.

olsa Biraz tavsiye: eğer mümkünse, size geçmiş öğesi dizede yüzde kaçar kullanmanızı gerektiren bir şema kullanmaktan kaçınmalısınız. Nedeni, location.href bittiğinde location.hash'un ne döndüğü, #%[email protected]%40 tarayıcısından tarayıcıya değiştiğidir. Örneğin, Chrome #%[email protected]%40; Firefox, #<@@ değerini döndürür. location.hash ayarı, tarayıcıya özgü benzer etkilere sahip olabilir.

Gwt en Tarih belirteç mekanizması location.hash dayanır ve tarayıcı davranışına bu farkı normale gelmez. Sonuç olarak, yüzde kaçış gerektiren bir şey kullanırsanız, tarayıcılar arasında paylaşılamayan URL'ler alırsınız. Bu, başka bir sayfada GWT'nizdeki belirli bir noktaya atlayan bağlantılar oluşturmak istiyorsanız sorun olur. uygulama veya kullanıcıların GWT uygulamanızda bağlantı veren URL’leri paylaşmasını bekliyorsunuz. (veya kullanıcı Chrome'u yüklediğinde, web günlüğünüzdeki belirli noktalara işaret eden Firefox'tan yer işaretlerini içe aktarır ve aniden yer işaretleri daha önce olduğu gibi çalışmaz)

Paranoya için, ?'u eklemekten kaçınmalıyım, geçmişiniz belirteç dizede #, &, %, < veya > karakter. Ancak, orderDetails/oid=12313378 gibi dizgeler düzgün ve çapraz tarayıcı olmalıdır.

Aslında

+0

GWT (bahsettiğim konu aynı URL'ler birden fazla farklı tarayıcılarda çalışır sahip değil tüm çeşitli tarayıcılarda her birinde geçmişi belirteç yöntem işe sahip uğraşıyor olduğunu netleştirmek için Düzenlendi) Tarayıcılardaki farklılıkları dikkate alır. Hatta burada belirtilmeyen bir dizi farklı konuda çalışıyor. Yani, belirtilen karakterlerden herhangi birini kullanabilirsiniz. Bunu kontrol etmek istiyorsanız, sadece 'gwt-user.jar' (gwt 2.0) dosyasında' com.google.gwt.user.client.impl.HistoryImpl 'sınıflar bakabilirsiniz. Ve de kodlama yapar, böylece '@ 'içinde geçebilir ve bununla ilgilenir. –

+0

Harika sesler. GMail'in de tam olarak bunu yaptığını fark ettim, örneğin bir etikete tıklarsam, URL "... # gelen kutusu/etiket adı" olarak değişir. URL, etiket adını kodlar, ancak aynı şeyi URL.encode ve URL.decode ile yapıyorum. – Epaga

+0

Sadece eksiksiz olmak için. Eğer 'History.newItem (..)' seçeneğini kullanırsanız, kod çözme/kodlama yapmamalısınız, çünkü GWT zaten sizin için bunu yapar. Aslında bunu yaparsanız, Firefox hakkında bahsedilen sorunlara yol açabilir. –