UnityLuaMvvM Lua 带通知的Mode类

实现数据更新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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值