https://github.com/dmccuskey/lua-events-mixin
Add event capability to your Lua objects (e.g., event dispatch/listeners)
https://github.com/dmccuskey/lua-events-mixin
Last synced: over 1 year ago
JSON representation
Add event capability to your Lua objects (e.g., event dispatch/listeners)
- Host: GitHub
- URL: https://github.com/dmccuskey/lua-events-mixin
- Owner: dmccuskey
- License: mit
- Created: 2014-12-23T06:06:01.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2015-05-03T06:26:55.000Z (over 11 years ago)
- Last Synced: 2025-05-07T13:58:02.640Z (over 1 year ago)
- Language: Lua
- Homepage:
- Size: 324 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## lua-events-mixin ##
Add event capability to your Lua objects (event dispatch/listeners)
This module can add Event capability to any of your objects. It can be used either as a mixin class or by "monkey-patching" your object. It was designed to work with [lua-objects](https://github.com/dmccuskey/lua-objects) and has also been integrated in [dmc-objects](https://github.com/dmccuskey/dmc-objects) as a mixin.
### Features ###
* addEventListener
* removeEventListener
* dipatchEvent
* custom events
* unit tests
### Examples ###
#### Mixin Class ####
The project [dmc-objects](https://github.com/dmccuskey/dmc-objects) contains the `ObjectBase` sub-class which shows how to use this module as a mixin with multiple inheritance.
Here it is in a nutshell:
```lua
-- import the events mixin module (adjust path for your project)
local EventsMixModule = require 'dmc_lua.lua_events_mix'
-- create ref to mixin (optional)
local EventsMix = EventsMixModule.EventsMix
-- do multiple inheritance !
local ObjectBase = newClass( { Class, EventsMix } )
-- Then call init method in your OO Framework construction phase
-- with dmc-objects
self:superCall( EventsMix, '__init__', ... )
-- with other frameworks
EventsMix.__init__( self, ... )
-- When destroying, you can call __undoInit__
-- with dmc-objects
self:superCall( EventsMix, '__undoInit__' )
-- with other frameworks
EventsMix.__undoInit__( self )
```
#### Monkey Patching ####
```lua
--== Import module
local EventsMixModule = require 'dmc_lua.lua_events_mix'
--== Setup aliases, cleaner code
local EventsMix = EventsMixModule.EventsMix
--== Patch an object ==--
-- create one for yourself (eg, with OOP library)
local obj = {} -- empty or create one from your OOP library
obj = EventsMix.patch( obj ) -- returns object
-- or have patch() create one for you
local obj = EventsMix.patch() -- returns a new object
--== Methods
-- obj.EVENT constant is automatically added to your object, it can be changed
--
obj:addEventListener( obj.EVENT, callback )
obj:removeEventListener( obj.EVENT, callback )
obj.EVENT = 'obj_event' -- EVENT can be changed
obj.EVENT_NAME = 'my_custom_event_name' -- add this
obj:dispatchEvent( obj.EVENT_NAME, data )
--== Misc Methods
-- set a function to turn on/off debug output (per object)
obj:setDebug( boolean )
-- set a function to create custom events
obj:setEventFunc( func )
```