0

我有一个关于如何维护所呈现的 jGrowls 状态的 jQuery / jGrowl 问题。我有一个使用 PHP/MySQL 构建的通知系统。那是容易的部分。我已经设法让 jGrowls 正确显示。

现在,我想保持消息/jGrowls 的状态,直到用户单击每个 jGrowl 的“关闭”或关闭所有 jGrowl 的“全部关闭”链接。我有一个 users_notifications MySQL 表,我可以在其中管理哪些通知已被“读取”。我认为最好的方法是使用 close() 或 beforeClose() 回调向服务器发出 getJSON (ajax) 请求,但我不确定如何编写。我需要通过请求将通知 ID 传回。

<?php
if (!empty($notifications))
{
    foreach ($notifications as $notification)
    {
?>
        <script>
            <!--
            $(document).ready(function() {
                var notification = <?php echo json_encode($notification); ?>;
                $.jGrowl(notification.message, {
                    beforeClose: function(){
                        var markReadUrl = '<?php echo site_url('notifications/ajax_mark_as_read') ?>' + '/' + notification.id;
                        $.getJSON(markReadUrl, function(data) {
                            console.log(data);
                        });
                    }
                });
            });
            //-->               
        </script>
<?php
    }
}
?>

02/12 更新:我想我发现了让我困惑的地方。

测试时我使用了 2 或 3 个通知 (jGrowls)。我期待当用户单击单个 jGrowl 关闭链接时会触发 beforeClose() 回调函数,即 jGrowl 右侧的“x”链接。'x' 关闭是否有回调?请注意,当用户单击“全部关闭”时,beforeClose() 回调会正确触发,并触发每个 jGrowl 的函数。所以,在某种程度上,“关闭所有”就像一个“标记为已读”链接,而“x”链接什么也不做。这是预期的功能吗?

4

1 回答 1

1

你是对的,你可以选择两个不同的回调,你可以使用'close'或'beforeClose'。我可能会选择“beforeClose”,因为此时通知已被解除,接下来将开始从页面中删除它的过程。

因此,利用回调可能如下所示:

$.jGrowl('Message here...', {
    beforeClose: function(){
        $.ajax({
            url: '/path/to/dismiss/action',
            success: function(){}
        });
    }
});

如果这是您将在每个通知中使用的内容,您可以执行以下操作...

$.jGrowl.defaults.beforeClose = function(){
    //...
}

我的猜测是,您将需要以某种方式单独跟踪通知,这样当您发出 ajax 请求以将其关闭时,您将传回主键或类似的东西。我建议的一件事是使用 beforeOpen 回调并使用 data() 方法为您的主键设置唯一标识符。这样,当您设置消息时它就被绑定了,您可以稍后在它被关闭时引用它,而不必担心在其他地方处理信息。

希望这可以帮助!

于 2013-02-12T13:13:06.750 回答