2010-04-09 2 views
0

У меня есть следующий код, который извлекает json-данные с страницы ASP.NET и отображает их как уведомления. Код также примет к сведению то, что было вытащено, и сохранить его в массиве, чтобы он не показывался снова в том же сеансе.beforeClose не работает в jGrowl?

Теперь я пытаюсь реализовать функциональность, так что когда пользователь закрывает сообщение, его идентификатор записывается в файл cookie, чтобы он никогда не показывался снова. Чтобы сделать это, я пытаюсь писать в файл cookie, когда запускается событие beforeClose.

Все остальное отлично работает от сохранения до кука-файла. Что-то не так с моим кодом, что мне не хватает?

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']); 
    }); 
}); 

}

ответ

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

Пройди свой параметр Id через параметры.

0

Это:

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

должно быть:

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

Ваш BeforeClose происходит позже, с контекстом созданного элемента, но entry не доступен на данный момент, вы, вероятно, увидите, что cookie получает значение undefined или erro ring ... это должно исправить это, явно передав id в замыкание.

+0

Спасибо за вашу помощь, к сожалению, похоже, что это не сработало, поскольку я все еще получаю те же два уведомления при обновлении страницы. Отладка в FireBug показывает, что массив содержит два идентификатора уведомлений, но переменная noteCookie имеет значение null. – sparkymark75

+0

Просто попробовал образец 5 на сайте авторов (http://stanlemon.net/projects/jgrowl.html), и я заметил, что если вы позволяете автоматическому закрытию уведомления, событие beforeClose, похоже, срабатывает. Если вы закрываете его вручную с помощью опции x, событие не срабатывает! – sparkymark75

0

OK. Используя событие close, я могу добавить идентификатор сообщения в файл cookie, моя следующая проблема заключается в том, что cookie кажется пустым/пустым в новом сеансе, несмотря на то, что я установил истечение срока действия.

//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); 
       } 
      }); 
     } 
    }); 
}); 
} 
Смежные вопросы