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

# 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"

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