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中的全部驗證消息用一樣的方法進行對比。模板