2011-08-14 17 views
7

Durumu konumlara itmek için jQuery BBQ eklentisini kullanıyorum.Hash hashchange olayını tetiklemeden programlı olarak güncelleniyor mu?

Geribesleme döngüsünü önlemek için, durumu programsal olarak ayarlarken karma sıra dinleyiciyi geçici olarak devre dışı bırakmak isterim.

Bu çözümü gördüğüm

: Şu anda bir

updateURL(obj){ 
    $(window).unbind('hashchange'); 
    $.bbq.pushState(obj); 
    setTimeout(function() { bindHashChange()}, 500); 
} 

var mı: Change hash without triggering a hashchange event

Ne yazık ki, bazen bunu halde tetikleyici olarak mükemmel sağlam olması için görünmüyor durumları programatik olarak zorlamak için daha iyi bir yaklaşım? Belki başka bir JS kütüphanesi?

cevap

2

Bunu bir zaman aşımı ile yapmak güvenilir şekilde çalışmayacaktır. Bağlantılı cevabın önemli kısmı, işleyicinizin bildiği bir bayrak ayarlıyor. Kod için güncellenmiş soruya bakın.

function updateState(state, handler) { 
    var win = $(window); 

    function temporaryHandler() { 
     win.unbind('hashchange', temporaryHandler); 
     win.bind('hashchange', handler); 
    }; 

    win.unbind('hashchange', handler); 
    win.bind('hashchange', temporaryHandler); 

    $.bbq.pushState(state); 
} 
:

Alternatif olarak, işleyicisi yeniden tesis sorumlu olan etkinliğe geçici işleyici bağlamak

İlgili konular