2010-04-09 8 views
0

J'ai le code suivant qui tire des données json d'une page ASP.NET et les affiche comme des notifications. Le code prendra également note de ce qui a été tiré et stocké dans un tableau pour éviter qu'il ne soit affiché à nouveau dans la même session.beforeFermer de ne pas travailler dans jGrowl?

J'essaie maintenant d'implémenter une fonctionnalité de sorte que lorsque l'utilisateur ferme un message, son ID est enregistré dans un cookie pour éviter qu'il ne soit affiché à nouveau. Pour ce faire, j'essaie d'écrire dans le cookie lorsque l'événement beforeClose se déclenche.

Tout le reste fonctionne bien, sauf l'enregistrement dans un cookie. Est-ce qu'il y a quelque chose qui ne va pas avec mon code?

var alreadyGrowled = new Array(); 
var noteCookie = $.cookie("notificationsViewed"); 
if (noteCookie != null) { alreadyGrowled = noteCookie.split(","); } 

function growlCheckNew() { 
$.getJSON('getNotifications.aspx', function(data) { 
    $(data).each(function(entryIndex, entry) { 
     var newMessage = true; 
     $(alreadyGrowled).each(function(index, msg_id) { 
      if (entry['ID'] == msg_id) { 
       newMessage = false; 
      } 
     }); 

     if (newMessage == true) { 
      $.jGrowl(entry['Message'], { 
       sticky: true, 
       header: entry['Title'], 
       beforeClose: function(e, m) { 
        $.cookie("notificationsViewed", entry['ID']); 
       } 
      }); 
     } 
     alreadyGrowled.push(entry['ID']); 
    }); 
}); 

}

Répondre

0
$.jGrowl(entry['Message'], { 
     myId:entry['ID'], 
     sticky: true, 
     header: entry['Title'], 
     close: function(e, m, o) { 
      $.cookie("notificationsViewed", o.myId); 
     } 
    }); 

passer votre paramètre Id grâce à des options.

0

Ce:

 $.jGrowl(entry['Message'], { 
      sticky: true, 
      header: entry['Title'], 
      beforeClose: function(e, m) { 
       $.cookie("notificationsViewed", entry['ID']); 
      } 
     }); 

doit être:

 var id = entry['ID']; 
     $.jGrowl(entry['Message'], { 
      sticky: true, 
      header: entry['Title'], 
      beforeClose: function(e, m) { 
       $.cookie("notificationsViewed", id); 
      } 
     }); 

Votre beforeClose se produit plus tard, avec le contexte de l'élément créé, mais entry n'est pas disponible à ce stade, vous verrez probablement que le cookie est défini sur non défini ou erro ring ... cela devrait corriger cela en passant explicitement l'identifiant dans la fermeture.

+0

Merci pour votre aide, malheureusement, cela ne semble pas avoir fonctionné, car je suis toujours présenté avec les deux mêmes notifications lors de l'actualisation de la page. Le débogage dans FireBug montre que le tableau contient les deux identifiants des notifications mais que la variable noteCookie est null. – sparkymark75

+0

J'ai juste essayé l'exemple 5 sur le site des auteurs (http://stanlemon.net/projects/jgrowl.html) et j'ai remarqué que si vous autorisez la fermeture automatique de la notification, l'événement beforeClose semble se déclencher. Si vous le fermez manuellement via l'option x, l'événement ne se déclenche pas! – sparkymark75

0

OK. En utilisant l'événement close, je peux ajouter l'identifiant du message à un cookie, mon prochain problème est que le cookie semble être vide/vide dans une nouvelle session, bien que je mette une expiration.

//notification functions 
var alreadyGrowled = new Array(); 
var keepClosed = new Array(); 
var noteCookie = $.cookie("notificationsViewed"); 
if (!noteCookie) { 
    $.cookie("notificationsViewed", "", { expires: 365, path: '/' }); 
} else { 
    keepClosed = noteCookie.split(","); 
} 

function growlCheckNew() { 
    $.getJSON('getNotifications.aspx', function(data) { 
    $(data).each(function(entryIndex, entry) { 
     var newMessage = true; 
     $(alreadyGrowled).each(function(index, msg_id) { 
      if (entry['ID'] == msg_id) { 
       newMessage = false; 
      } 
     }); 

     $(keepClosed).each(function(index, msg_id) { 
      if (entry['ID'] == msg_id) { 
       newMessage = false; 
      } 
     }); 

     if (newMessage == true) { 
      var id = entry['ID']; 
      alreadyGrowled.push(id); 
      $.jGrowl(entry['Message'], { 
       sticky: true, 
       header: entry['Title'], 
       close: function(e, m) { 
        keepClosed.push(id); 
        $.cookie("notificationsViewed", keepClosed); 
       } 
      }); 
     } 
    }); 
}); 
} 
Questions connexes