站内信系统是位于个人中心的一个小模块,在用户登录之后,进入个人中心,有一个站内信的导航按钮,点击进入站内信即可查看站内通知。
站内通知的展示分为两种,一种是已读同时,一种是未读通知。
站内信的实现需要是基于用户名的,因此发送请求的时候需要加入用户名作为参数,这就是我们的接口文档,前后台分离开发时,都是按照接口文档来进行对接的。
同时,项目关于站内通知的渲染采用的是observer的方式,这在博客的第一篇《js观察一个变量的变化》一文有介绍过。定义一个notice的变量,对其的data进行监听,只要data发生了变化,就会主动调用set的回调函数来自动渲染视图。
Object.defineProperty(notice,"data",{
get:function(){
return data;
},
set:function(value){
notice.data=value;
console.log("set:",data);
updataNotice();
}
})下面是渲染视图的方法:
function updataNotice(){
var str = '';
notice.data.map((item,index)=>{
str+=`<div class="panel ${item.read?'panel-default':'panel-info'} ">
<div class="panel-heading">
<h3 class="panel-title">${item.title}</h3>
</div>
<div class="panel-body">
<p>From: ${item.from} <small class="small-gray">${item.time}</small> </p>
<p>${item.content}</p>
${item.read?'':'<button class="btn btn-info left-bottom read" οnclick="readNotice('+`${item.nid}`+')" >标记为已读</button>'}
</div>
</div>`
})
document.getElementById('notice').innerHTML=str;
}这样可以减少许多重复的代码,提高代码的可读性,是渲染过程自动化。
下面是通知已读的请求代码:
function readNotice(nid){
new AjaxHandler().readNotification($.cookie('username'),nid,function(data){
if(data.status===200){
new Toast().showMsg(data.message,1000)
getNotice();
}else{
new Toast().showMsg(data.message,1000)
}
},function () {
new Toast().showMsg('网络异常',1000)
})
}同样需要发送用户名和通知的id作为参数。 版权声明:本文为wengqt原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。