phone-->im-->sys_message.htmlhtml
在模板中执行对应的js,而后将过滤后的数据拿出来渲染:code
<% var dataObj = repeatMsg.showData(data); for (var key in dataObj) { %>
repeatMsg.showData(data)是主要的过滤方法。htm
var repeatMsg = (function(){ var repeatObj = {}; var dataMsg = [],dataMsgApp=[]; repeatObj.showData = function(data){ dataMsgApp=[]; var len = dataMsg.length if(len==0 && data.length>0){ repeatObj.setDataMsg(data); return dataMsg; }else{ repeatObj.setDataMsg(data); return dataMsgApp; } }; repeatObj.setDataMsg = function(data){ for(var i = 0; i< data.length;i++){ if(dataMsg.length == 0){ dataMsg.push(data[i]); }else{ var temp = true; for(var j = 0; j< dataMsg.length;j++){ var dataMsgkey = repeatObj.getDataKey(dataMsg[j]); var datakey = repeatObj.getDataKey(data[i]); if(dataMsgkey == datakey){ temp = false; break; } } if(temp){ dataMsg.push(data[i]); dataMsgApp.push(data[i]); } } } }; repeatObj.getDataKey = function(data){ var type = data.extra.type; if(type == 'ms-0002' || type == "ms-0003"){ var ms_extra_info = data.extra.ms_extra_info; return ms_extra_info.im_group_id+"_"+ms_extra_info.user_code; } if(type == 'ms-0001'){ return data.extra.ms_extra_info.user_code; } if(type == 'ms-0006'){ return data.extra.group_id; } return ""; }; return repeatObj; })();
以上代码的结构为var k = (function(){})(); 内部function的地位和k等价,因此在页面未关闭的状况下,function内部的变量的数据不会被初始化。get
geiDataKey()方法返回的值为每一个类型的惟一ID(与主键不一样,由于每生成一条系统消息就会产生一个新的主键,可是内容却极可能是相同的。)io
setDataMsg()方法是过滤的核心,它进行两层循环,第一层为基数,第二层的数据为过滤后的部分数据;而后将第一层的数据与第二层的数据进行对比,若是发现重复就跳出循环,而且不向dataMsg中添加数据,若是发现没有重复就向dataMsg中添加数据。function
showData()方法是返回过滤后的数据,dataMsgApp是在页面未关闭的状况下渲染新加入的验证消息;dataMsgApp在方法执行的时候会被初始化,因此只会有当前发送过来的新的一条验证消息。而后将此验证消息与以前dataMsg中的全部验证消息用一样的方法进行对比。模板