Another small change for states
This commit is contained in:
@@ -89,7 +89,7 @@ function BaseElement:setState(name, value)
|
|||||||
-- Trigger observers
|
-- Trigger observers
|
||||||
if observers[name] then
|
if observers[name] then
|
||||||
for _, callback in ipairs(observers[name]) do
|
for _, callback in ipairs(observers[name]) do
|
||||||
callback(self, name, value)
|
callback(name, value)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ function BaseElement:setState(name, value)
|
|||||||
state.value = state.computeFn(self)
|
state.value = state.computeFn(self)
|
||||||
if observers[stateName] then
|
if observers[stateName] then
|
||||||
for _, callback in ipairs(observers[stateName]) do
|
for _, callback in ipairs(observers[stateName]) do
|
||||||
callback(self, stateName, state.value)
|
callback(stateName, state.value)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -135,12 +135,12 @@ end
|
|||||||
--- @return BaseElement self The element instance
|
--- @return BaseElement self The element instance
|
||||||
function BaseElement:onStateChange(stateName, callback)
|
function BaseElement:onStateChange(stateName, callback)
|
||||||
local main = self:getBaseFrame()
|
local main = self:getBaseFrame()
|
||||||
if not main.get("states")[stateName] then
|
local state = main.get("states")[stateName]
|
||||||
|
if not state then
|
||||||
errorManager.error("Cannot observe state '" .. stateName .. "': State not initialized")
|
errorManager.error("Cannot observe state '" .. stateName .. "': State not initialized")
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
local observers = main.get("stateObserver")
|
local observers = main.get("stateObserver")
|
||||||
|
|
||||||
if not observers[stateName] then
|
if not observers[stateName] then
|
||||||
observers[stateName] = {}
|
observers[stateName] = {}
|
||||||
end
|
end
|
||||||
@@ -201,14 +201,14 @@ function BaseElement:bind(propertyName, stateName)
|
|||||||
self.set(propertyName, main:getState(stateName))
|
self.set(propertyName, main:getState(stateName))
|
||||||
end
|
end
|
||||||
|
|
||||||
self:onChange(propertyName, function(_, name, value)
|
self:onChange(propertyName, function(self, value)
|
||||||
if internalCall then return end
|
if internalCall then return end
|
||||||
internalCall = true
|
internalCall = true
|
||||||
self:setState(stateName, value)
|
self:setState(stateName, value)
|
||||||
internalCall = false
|
internalCall = false
|
||||||
end)
|
end)
|
||||||
|
|
||||||
self:onStateChange(stateName, function(_, name, value)
|
self:onStateChange(stateName, function(name, value)
|
||||||
if internalCall then return end
|
if internalCall then return end
|
||||||
internalCall = true
|
internalCall = true
|
||||||
if self.get(propertyName) ~= nil then
|
if self.get(propertyName) ~= nil then
|
||||||
|
|||||||
Reference in New Issue
Block a user