     fire: (eventName, arg) ->
         @_eventList[eventName] ?= []
         m(arg) for m in @_eventList[eventName]
-        undefined
+        @
     listeners: (eventName) -> @_eventList[eventName]
 # ====================]

# And it can avoid using strings so `eventField` is better. But maybe others like `EventedObject`
# so I keep both.
# ====================[
# This function is weird and hard to understand, but we must use this mechanism
# (function+object hybrid) to support cascade (chaining).
global.eventField = ->
    f = (method, arg) ->
        if typeof method == "function"

    f.unbind = (listener) ->
        f._listeners.removeAll(listener)
        f
    f.unbindAll = ->
        f._listeners = []
        f
    f.fire = (arg) ->
        for listener in f._listeners
            if arg?.blocksListeners then break
            listener(arg)
        f
    f
class global.EventedObject
    constructor: ->
