2011-10-15 23 views
14

İleri ve geri düğmelerini ve hatta yer işaretlerini kullanabilmem için ajax sitem için History.js uygulamasını çalıştırmaya çalışıyorum. Ancak, @https://github.com/browserstate/History.js/ örneğinin, onu nasıl uygulayacağına dair biraz kafamı vardır. Bunun nasıl kullanılacağı konusunda basit bir öğretici veya örnek var mı? Biz örnek başlatmak için kullanabileceğiniz bir örnekHistory.js uygulaması

<script type="text/javascript"> 
window.onload = function() 
{ 
function1(); 
}; 

<ul> 
<li><a href="javascript:function1()">Function1</a></li> 
<li><a href="javascript:function2('param', 'param')"</a></li> 
</ul> 
+0

Olası bir cevabı ve ilgili soruya buradan ulaşabilirsiniz: http://stackoverflow.com/questions/13278822/is-this-a-proper-way-to-use-history-js – dansalmo

cevap

34

I History.js'yi nasıl kullanacağınızı tamamen anlamakta sorun yaşadım.

1. Get (window.history history.js bir referans History.js bir başvuru almak referansı cisme

nesne Capitol: İşte açıklama benim yorumlarla kendi wiki bazı kodudur 'H').

HTML5 geçmişinin etkin olup olmadığını kontrol etmek için History.enabled öğesini işaretleyin. History.js, eğer olmasa bile karma etiketlerini kullanarak çalışmaya devam edecektir.

History.enabled 

2.

geçmiş değişikliklerini dinle durum değişiklikleri Adaptör nesnenin statechange olaya bağlanan tarihi için dinlemek için buraya

görünümünüzü güncellemek.

History.Adapter.bind(window,'statechange',function(){ 
    var State = History.getState(); 
    History.log(State.data, State.title, State.url); 
}); 

3.

itmek kullanarak tarih durumlarını işleyin veya

tarihine bir devlet eklemek için değiştirin pushState diyoruz. Bu, yukarıda gösterildiği gibi 'statechange' olayını tetikleyecek olan tarih yığınının sonuna bir durum ekleyecektir.

History.pushState({data:"any kind of data object"}, "State Title", "?urlforthestate=1"); 

tarihine bir devlet değiştirmek için replaceState diyoruz. Bu, yukarıda gösterildiği gibi 'statechange' olayını tetikleyecek olan tarih yığındaki son durumu değiştirecektir.

History.replaceState({data:"any kind of data object"}, "State Title", "?urlforthestate=1"); 

pushState ve replaceState arasındaki fark pushState replaceState son halini üzerine yazacaktır geçmiş listesine bir devlet katacak olmasıdır.

NOT: pushState ve replaceState, veri nesnesini serileştirir, bu nedenle orada minimum veriyi kullanın.

4. geçmişini gezinmek muktedir kullanıcı için ek ui eklemek istiyorsanız

, navigasyon

kullanın geri komutlarını kullanmak ve kodu aracılığıyla geçmişinde gezinmeyi gidin.

History.back(); 
History.go(2); 

Ek:

geçmişi olan "a" etiketlerini kullanmak için geçmişi ile "a" etiketlerini müdahale olayları tıklayıp (event.preventDefault kullanarak gezinme tarayıcıyı önlemek gerekir kullanma) yöntem.

Örnek:

<a href="dogs/cats" title="Dogs and cats">Dogs and Cats</a> 

$('a')​.click(function(e){ 
    e.preventDefault(); 
    var url = $(this).attr('href'); 
    var title = $(this).attr('title'); 
    History.pushState({data:title}, title, url); 
})​; 

umarım bu yardımcı olur.

+0

Ayrıca bununla örnek olarak mücadele ediyorum. Yukarıda gösterilenleri alıyorum, ancak # yöntemini kullanan önceki history.js ile karşılaştırıldığında eksik olan çok şey var. Bir nav menüsünde bir çapa gibi tıklanabilir öğelere bağlanarak çalışan önceki # temel örnekleri elde edebildim. Bu daha sonra ajax çağrısının yapılabileceği href'e dayalı bir işleyiciyi çağırır. Her bir URL için tıklama etkinliklerinin buraya nasıl bağlandığını göremiyorum. Denediğim her şey, tıklama tıklama etkinliklerini engellemiyor. – dansalmo

+0

Yapmanız gereken şey, bu hrefs üzerindeki tıklamaları durdurup oradan gitmek. Örnek: $ ('a') .click (işlev (e) {e.preventDefault();}). E.preventDefault() öğesinden sonra, href özniteliğinin değerini alabilir ve sayfadan ayrılmadan geçmiş durumlarını zorlamak için kullanabilirsiniz. – zachzurn

+0

Teşekkürler, ben böyle bir şey yaptım ve yukarıda ekledim ama gerçekten doğru yolu olup olmadığından emin değilim. Ayrıca, neden e.preventDefault() gerektiğini anlamıyorum. Sahte geri dönüş gibi görünüyor; aynı şeyi yapar. – dansalmo