我有一个关于如何维护所呈现的jGrowls状态的jQuery / jGrowl问题。我有一个使用PHP / MySQL构建的通知系统。这很容易。我已经设法正确显示jGrowls。
现在,我想维护messages / jGrowls的状态,直到用户点击每个jGrowl的“Close”或关闭所有jGrowl的“close all”链接。我有一个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右侧的单个jGrowl关闭链接('x'链接)时会触发beforeClose()回调函数。是否有'x'关闭的回调?注意,当用户单击“全部关闭”时,beforeClose()回调会正确触发,并触发每个jGrowl的函数。因此,在某种程度上,“全部关闭”的行为类似于“全部标记为已读”链接,而“x”链接则不执行任何操作。这是预期的功能吗?
答案 0 :(得分:1)
你是对的,你可以选择两种不同的回调你可以使用'close'或'beforeClose'。我可能会选择'beforeClose',因为此时通知已被解除,接下来将开始从页面中删除它。
所以利用回调可能如下所示:
$.jGrowl('Message here...', {
beforeClose: function(){
$.ajax({
url: '/path/to/dismiss/action',
success: function(){}
});
}
});
如果这是您将在每个通知中使用的内容,您可以执行以下操作...
$.jGrowl.defaults.beforeClose = function(){
//...
}
我的猜测是你需要以某种方式单独跟踪通知,这样当你发出ajax请求来解雇它时,你将传回主键或类似的东西。我建议的一件事是使用beforeOpen回调并使用data()方法为主键设置唯一标识符。这样,当你设置你的消息时它就会受到限制,你可以在以后被解雇时引用它,而不必担心在其他地方处理这些信息。
希望这有帮助!