     ###
     extract = (property) =>
       p = params[property]
-      k = @controller["#{property}_#{act}"]
+      k = controller["#{property}_#{act}"]
       err = (a) ->
         "#{a} action must be string or function"
       if SiriusUtils.is_string(p)
-        t = @controller[p]
+        t = controller[p]
         throw err(SiriusUtils.camelize(property)) if !SiriusUtils.is_function(t)
         t
       else if SiriusUtils.is_function(p)

            r = f.match(current)
            if r && !result
              result = true
              f = part[1]
              if f.handle_event
                f.handle_event(null, f.args)
              else
                f.apply(null, f.args)
              return

        #when no results, then call 404 or empty function

    @data = params['data'] || null

  # e is a event need extract event target
  handle_event: (e, args...) ->
    @before()

    #when e defined it's a Event, otherwise it's call from url_routes
    if e
      if @data
        @data = if SiriusUtils.is_array(@data) then @data else [@data]
        data = SiriusApplication.adapter.get_property(e, @data)
        @action.apply(null, [].concat([], [e], data)) 
      else
        @action.apply(null, [e])
    else
      @action.apply(null, args)

    @after(null)



