DataWatcher =
{
value, --数据
onValueChangeEvent, --回调时参数old value
onKeyValueChangeEvent, --回调时参数key old value
}
function DataWatcher:New(value)
local t =
{
value,
onValueChangeEvent = Event:New(),
onKeyValueChangeEvent = Event:New(),
}
setmetatable(t, DataWatcher)
return t
end
function DataWatcher:SetValue(value)
if value == self.value then
return
end
local old = self.value
self.value = value
self.onValueChangeEvent:Call(value, old)
end
function DataWatcher:SetKeyValue(key, value)
if value == self.value[key] then
return
end
local old = self.value[key]
self.value[key] = value
self.onKeyValueChangeEvent:Call(key, value, old)
end
function DataWatcher:Fresh(callBack)
if callBack then
callBack(self.value, self.value)
else
self.onValueChangeEvent:Call(self.value, self.value)
end
end
function DataWatcher:AddWatcher(watch)
if watch then
self.onValueChangeEvent:Add(watch)
end
end
function DataWatcher:RemoveWatcher(watch)
if watch then
self.onValueChangeEvent:Remove(watch)
end
end
function DataWatcher:Release()
self.onValueChangeEvent:Clear()
self.onKeyValueChangeEvent:Clear()
end
DataWatcher.__index = DataWatcher
return DataWatcher