2011-01-31 7 views
7

Merhaba GWT'yi ve "Geçmiş" sınıfı aracılığıyla geçmişi desteklemenin standart yolunu kullanıyorum. Çok uygun ama çapa kısmını bir url'den nasıl çıkarabilirim? Örneğin:GWT. Bağlantı parçasını kaldır url

Benim baz url:

http://www.mysuperwebsite.com/myapp 

Yeni geçmişi öğesi ekleyen bir yere taşımak uygulamayı kullanırken. kodunda

: Sonuç olarak

History.newItem("funnygame"); 

:

http://www.mysuperwebsite.com/myapp#funnygame 

Bir yerde bir kez daha değiştirin: kodunda

: Sonuç olarak

History.newItem("notsofunnygames"); 

:

http://www.mysuperwebsite.com/myapp#notsofunnygames 

Sonra ana sayfama dönmek istiyorum (http://www.mysuperwebsite.com/myapp).

geri almak için kod ?:

???? 

yerleştirilmelidir Ne

: Ben hedefe ulaşmak herhangi standart bir yolu var mı

http://www.mysuperwebsite.com/myapp 

?


Böyle bir şey eklerseniz: url

http://www.mysuperwebsite.com/myapp# 

olacak

History.newItem(""); 

veya

History.newItem(null); 

Ve bu lloking ediyorum ne değildir, Keskin karaktere ihtiyacım yok. Eğer History.newItem(null); kullanırsanız

int index = link.indexOf('#'); 
if (index != -1) { 
    link = link.substring(0, index); 
} 

cevap

5

yeni bir olay tetiklenir: bunu kaldırmak için aşağıdaki kullanabilmesi

+0

Cevabınız için teşekkür ederiz. Düşünecek ilk çözüm budur. "#" Olmadan ihtiyacım var. Sorumu güncelleyeceğim. – Zalivaka

+0

Boş/myapp # parçasının hiçbir etkisi olmayacak, her şekilde/myapp ile aynı. –

+0

Yer isimlerini buradan almaya çalışırken aynıdır, ancak konum çubuğunda farklı görünüyor. – Zalivaka

2

çapa, bir # tanımlanır. Sonuç olarak, ana sayfanızı geçiş yapılır: http://www.mysuperwebsite.com/myapp#

ucunda bir # olması veya aynı şey değildir, yanlış mıyım?

DÜZENLEME: sen muhtemelen yanlış geçmişini kullandığınız bir historytoken istemiyorsanız

... 
    // Get the last part of the url and remove #token 
    String s = Location.getHref().substring(Location.getHref().lastIndexOf("/")); 
    s = s.substring(0, s.indexOf("#")-1); 
    setToken(s); 
    ... 

    protected native void setToken(String token) /*-{ 
    $wnd.history.pushState({},'', token); 
}-*/; 
+0

Cevabınız için teşekkür ederiz. Ama sen beni anlamadın. Sorumu daha açık olmak için güncelledim. – Zalivaka

+0

'History.back()' ı denediniz mi? – dogbane

+0

Uygun değil, çünkü çok basit bir örnek verdim, gerçekte ise çok daha karmaşık. Ev görünümüne geri dönmem gerekmeden önce pek çok yer görüntülenebilir. – Zalivaka

0

. Navigasyon ile uğraşmak istemiyorsanız GwtEvent/EventHandler'ı kullanmanızı tavsiye ederim.Esas olarak gwt'ın History sınıfının yaptığı şey, bu olayları navigasyon tarihine bağlamanın yanı sıra.

0

Bir araç sınıfı oluşturabilir ve History değiştiğinde bunu çağırabilirsiniz.

public class UrlUpdater { 

    public static void removeHashIfEmpty() { 
     if(isHashEmpty()) 
      removeHash(); 
    } 

    private static boolean isHashEmpty() { 
     return "#".equals(Window.Location.getHash()); 
    } 

    private static void removeHash() { 
     updateURLWithoutReloading(Window.Location.createUrlBuilder().setHash(null).buildString()); 
    } 

    private static native void updateURLWithoutReloading(String newUrl) /*-{ 
     $wnd.history.replaceState({}, null, newUrl); 
    }-*/; 

} 
+0

Firefox'ta çalışır, ancak kromda değil, çözüm için kontrol ederim ve geri döneceğim –