MailItem = MailItem or BaseClass(BaseItem) function MailItem:__init() self.base_file = "sociality" self.layout_file = "MailItem" self.is_delay_callback = true self.model = MailModel:getInstance() self.data = nil self.event_id_list = {} self.need_refreshData = false self.need_refreshClick = false -- self.use_local_view = true self:Load() end function MailItem:Load_callback() self:LoadSuccess() self:InitEvent() if self.need_refreshData then self:SetData(self.data) end if self.need_refreshClick then self:OnClickHandler(self.click_id) end end function MailItem:LoadSuccess() self.nodes = { "mailTitle:tmp", "mailTime:tmp", "attachmentIcon:img", "mailHead:img", "selectBg:obj", "redDot:obj", "importantFlag:obj", } self:GetChildren(self.nodes) end function MailItem:InitEvent() local function onBtnClickHandler(target) if self.data then if target == self.gameObject then--点击邮件Item self.model:Fire(MailEvent.CLICK_MAIL_ITEM, self.data.mail_id) end end end AddClickEvent(self.gameObject, onBtnClickHandler) --绑定点击item的方法 local click_fun = function(mail_id) self:OnClickHandler(mail_id) end table.insert(self.event_id_list, self.model:Bind(MailEvent.CLICK_MAIL_ITEM, click_fun)) --绑定更新item显示的方法 local update_fun = function(new_data) if self.data and self.data.mail_id == new_data.mail_id then self:SetData(new_data) self.model:Fire(MailEvent.GET_MAIL_INFORM) end end table.insert(self.event_id_list, self.model:Bind(MailEvent.UPDATE_MAIL_ITEM, update_fun)) end function MailItem:OnClickHandler(click_id) self.click_id = click_id if self.is_loaded then if self.data then if self.data.mail_id == self.click_id then self:SetSelect(true) self.model.now_select_mail = self.data self.model:Fire(MailEvent.GET_MAIL_DETAIL, self.data.mail_id) --通过邮件ID请求邮件详细信息 else self:SetSelect(false) end end else self.need_refreshClick = true end end function MailItem:SetSelect(bool) if self.selectBg_obj then self.selectBg_obj:SetActive(bool) end end function MailItem:SetData(data) self.data = data if not self.data then return end if self.is_loaded then local title_str = self.data.title if utf8len(title_str) > 9 then title_str = SubStringUTF8(title_str, 1, 8) .. "..." end self.importantFlag_obj:SetActive(self.data.important == 1) self.mailTitle_tmp.text = title_str self.mailTime_tmp.text = TimeUtil:timeConversion(self.data.time, "mm-dd hh:MM:ss") --邮件类型图标 local mail_type = self.model:GetMailType(self.data.mail_id) if mail_type == 5 then lua_resM:setImageSprite(self,self.mailHead_img,"sociality_asset","sociality_mail_head_2") else lua_resM:setImageSprite(self,self.mailHead_img,"sociality_asset","sociality_mail_head_1") end --已读、未读、已领取、未领取 if self.data.state == 3 then --附件已领取 lua_resM:setImageSprite(self,self.attachmentIcon_img,"sociality_asset","sociality_mail_reward_open_pointfilter") else if self.data.is_attach == 0 and self.data.state ~= 3 then --无附件 if self.data.state == 1 then --已读 lua_resM:setImageSprite(self,self.attachmentIcon_img,"sociality_asset","sociality_mail_read_pointfilter") else lua_resM:setImageSprite(self,self.attachmentIcon_img,"sociality_asset","sociality_mail_unread_pointfilter") end elseif self.data.is_attach == 1 then --有附件 lua_resM:setImageSprite(self,self.attachmentIcon_img,"sociality_asset","sociality_mail_reward_unopen_pointfilter") end end if self.data.state == 2 or (self.data.is_attach == 1 and self.data ~= 3) then self.redDot_obj:SetActive(true) else self.redDot_obj:SetActive(false) end self.gameObject:SetActive(true) else self.need_refreshData = true end end --清除item数据 function MailItem:Hide() if self.is_loaded then self.selectBg_obj:SetActive(false) self.data = nil -- self:SetVisible(false) end end function MailItem:__delete() for i, v in ipairs(self.event_id_list) do self.model:UnBind(v) end self.event_id_list = {} end