实现数据更新UI自动刷新的核心代码
欢迎关注https://gitee.com/xiongks/UnityMVVM
mode=function(modeType)
local obj = {}
obj.modeType=modeType
obj.filds={}
obj.events={}
obj.AddEventMap=function(self,k_Action_map)
table.insert(self.events,k_Action_map)
end
obj.RemoveEventMap=function(self,k_Action_map)
for i, v in ipairs(self.events) do
if v==k_Action_map then
table.remove(self.events,i)
return
end
end
end
obj.Notify=function(self,propName,author)
for k, k_Action_map in pairs(self.events) do
for k, v in pairs(k_Action_map) do
if k==propName then
v(author)
end
end
end
end
obj.set=function(self,k,v,author)
rawset(self.filds,k,v)
self:Notify(k,author)
end
obj.rawSet=function(self,k,v)
rawset(self.filds,k,v)
end
------------------------原表-----------------------
setmetatable(obj,{
__newindex=function(t,k,v)
rawset(obj.filds,k,v)
obj:Notify(k)
end,
__index=function(t,k,v)
return obj.filds[k]
end
})
return obj
end
-------------------------------测试------------------
m1= mode("skill")
m2= mode("ui")
--事件映射表,属性名=>响应方法
m1EventMap={
a=function(author)
print("a:"..m1.a)
print("OnChange:a by:",author)
end,
b=function(author)
print("b:"..m1.b)
print("OnChange:b by:" ,author)
end
}
m1:AddEventMap(m1EventMap)
print("-------------事件响应测试----------------")
--会触发事件
m1.a=5
--会触发事件,并附带数据修改者(author)
m1:set('a',6,"ui控件1")
print("-------------不触发事件测试----------------")
--不会触发事件
m1:rawSet("a",7)
print("a:",m1.a)
print("-------------移除EventMap测试----------------")
--移除事件后均不会触发事件
m1:RemoveEventMap(m1EventMap)
m1.a=8