2016-01-19 17 views
6

Pnotify eklentisini kullanan kullanıcılara bildirimleri gösteriyorum. Ancak, kullanıcı X simgesine tıklayarak 1 sekmede bildirimi kapatırsa tüm sekmelerde bildirimi kaldırmak istiyorum.localStorage.removeItem() olayına dinleme sadece

Bunun için localstorage kullanıyorum, kullanıcıya yeni bir bildirim gösterildiğinde, localStorage ürününe eklenir. Kullanıcı X simgesine bastığında, localStorage.removeItem(key) yapıyorum. Bildirimi tüm sekmelerde kapatmak için bu etkinliği nasıl dinlerim? her zaman olacak

$(window).bind('storage', function(e) { 
    // if it was removed 
    if (e.originalEvent.newValue == null) { 
     var notificationObject = e.originalEvent.oldValue; 

     // call remove function on pnotify object 
     notificationObject.remove(); 
    } 
}); 

Ben Çıkarılmışsa newValue bu (henüz test etmedim) çalışacak teoride, boş dönüşür fark, ancak açısından güvenilirdir:

Benim dinleyici altındadır removeItem bu öğe üzerinde çağrıldıysa null döndürür? Öğe değeri null olarak değişirse, değer doğru değiştiğinden bu olayı tetikler mi?

+0

(! E.originalEvent.newValue) – ymz

+1

burada undefined', Spec null' döndürülür 'dikte' işlemek için gerek yoktur @ymz if (e.originalEvent.newValue == null) olması gerekiyorsa Anahtar mevcut olmadığında. – Stijn

cevap

2
$(window).on("itemRemoved", function(e, args) { 
    console.log(e, args); 
    if (!localStorage.getItem(args)) { 
    // do stuff 
    } 
}) 

fn = localStorage.removeItem; 
localStorage.removeItem = function() { 
    var args = arguments; 
    setTimeout(function() { 
    $(window).trigger("itemRemoved", [args[0]]) 
    }); 
return fn.call(localStorage, args[0]); 
} 
+0

Bu, ihtiyacım olana benziyor. LocalStorage'ın yerleşik olarak bulunmadığını ve removeItem işlevini geçersiz kılarak bunu genişletmemizi sağladığını düşünüyorum. Bunun mümkün olduğunu bilmiyordum. Teşekkürler, bunu deneyeceğim. – GGio

3

Yerel Depolama her şeyi bir dize olarak saklar. kaldırıldığını zaman

localStorage.setItem("foo", null); 

// returns "null" 
localStorage.getItem("foo"); 

Gerçekten de newValuenull olduğunu. MDN: StorageEvent diyor ki:

Anahtarın yeni değeri. Değişiklik clear() yöntemiyle veya key depodan kaldırıldığında, newValue, null şeklindedir. Sadece oku.

nedenle, === null kullanarak null kontrol etmek güvenlidir.

+0

Teşekkürler. Yani benim kontrolüm === null yerine null = n = null? Dize değeri 'boş' olabileceğinden. – GGio

+0

@GGio Bunu cevaba ekledim. '=== null' kullanmalısınız. – Stijn

İlgili konular