이벤트 배포기
Dispatcher.lua
local Dispatcher = {}
Dispatcher.obj = {}
function Dispatcher:addEventListener(eventName, class, callBackFunc)
if self.obj[eventName] then
local t = self.obj[eventName]
t[class] = callBackFunc
else
local t = {}
t[class] = callBackFunc
self.obj[eventName] = t
end
end
function Dispatcher:removeEventListener(eventName, class)
local t = self.obj[eventName]
if t then
t[class] = nil
local haveAnyChild = false
for _, _ in pairs(t) do
haveAnyChild = true
break
end
if not haveAnyChild then
self.obj[eventName] = nil
end
end
if(self.temps ~= nil) then
for _,temp in pairs(self.temps) do
if(temp.eventName == eventName) then
local keys = nil
for func,class_ in pairs(temp) do
if(class_ == class) then
keys = keys or {}
keys[func] = true
end
end
if(keys ~= nil) then
for func,_ in pairs(keys) do
temp[func] = nil
end
end
end
end
end
end
function Dispatcher:removeAllEventListener()
for k, v in pairs(self.obj) do
self.obj[k] = nil
end
end
function Dispatcher:dispatchEvent(event)
-- :
-- , ,
-- , , :
-- , ,
local eventName = event["name"]
local t = self.obj[eventName]
if t then
local helper = {} -- , ,
self.temps = self.temps or {} --
self.temps[helper] = {}
local temp = self.temps[helper]
temp.eventName = eventName
for class, func in pairs(t) do
temp[func] = class
table.insert(helper, func)
end
repeat
local func = table.remove(helper, 1)
if(not func) then break end
if(temp[func] ~= nil) then
func(event)
end
until false
self.temps[helper] = nil
end
end
return Dispatcher
사용법: 신규 이벤트 감청
Dispatcher:addEventListener(Event.UI_WINDOW_CLOSE, self, handler(self, self.onWindowClose))
이벤트 감청 제거Dispatcher:removeEventListener(Event.UI_WINDOW_CLOSE, self)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.