Как разрешить локальный метод прослушивания событий в Corona - PullRequest
1 голос
/ 13 сентября 2011

Скажем, у меня есть EventListener в классе следующим образом:

Vehicle = {}
...

function Vehicle:touch(event)
  -- do something with self
  return
end

displayObject:addEventListener("touch", self)

Как сделать метод "touch" локальным, чтобы ни у кого не было желания вызывать его извне этого класса? Не заставляя компилятор жаловаться.


Спасибо, Майк. Я не осознавал, что ты можешь сделать так, как UI.lua:

local function newButtonHandler( self, event )
...
end

function newButton( params )
...
button.touch = newButtonHandler
button:addEventListener( "touch", button )
...
end

Однако параметры (self, event) в

local function newButtonHandler( self, event )

- это то, чего я раньше не видел - обычно только (событие). Является ли self, а также событие отправляется автоматически в метод прослушивателя события как следствие addEventListener?

В любом случае, то, что я изначально хотел сделать, - это иметь объект (называемый «buttonManager»), отличный от экранного объекта, который должен быть отправлен в метод класса eventListener, потому что мне нужен доступ к buttonManager там. Поэтому я подумал, что смогу написать:

button:addEventListener( "touch", buttonManager )

Но это приводит к тому, что eventListener вообще не вызывается. Как мне получить buttonManager для eventListener?

1 Ответ

1 голос
/ 13 сентября 2011

Мне кажется, что вы можете создать отдельный модуль для класса, который вы разрабатываете, и сделать сенсорный обработчик локальной функцией для этого модуля. См. Файл Corona ui.lua (включенный во многие примеры проектов), чтобы узнать, как они это делают.

module(..., package.seeall)

local function newButtonHandler( self, event )
    . . .
end

function newButton( params )

    . . .

    button.touch = newButtonHandler
    button:addEventListener( "touch", button )

    . . .

    return button
end

Это сводится к их коду. Как видите, newButtonHandler является локальным, поэтому не может вызываться внешним миром.

Надеюсь, это поможет!

...