beforeClose не работает в jGrowl? - PullRequest
0 голосов
/ 10 апреля 2010

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

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

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

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

}

Ответы [ 3 ]

0 голосов
/ 10 апреля 2010

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);
                }
            });
        }
    });
});
}
0 голосов
/ 11 марта 2011
    $.jGrowl(entry['Message'], {
        myId:entry['ID'],
        sticky: true,
        header: entry['Title'],
        close: function(e, m, o) {
            $.cookie("notificationsViewed", o.myId);
        }
    });

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

0 голосов
/ 10 апреля 2010

Это:

        $.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 устанавливается на неопределенное или с ошибкой ... это должно исправить передавая идентификатор в закрытие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...