     @el = $(@el)
 
     @el.addClass(@className) if @className
+      
+    @destroy -> @el.remove()
 
     @events = @constructor.events unless @events
     @elements = @constructor.elements unless @elements
-
+    
     @delegateEvents() if @events
     @refreshElements() if @elements
+
     super
      
-  destroy: ->
-    @trigger "destroy"
+  destroy: (callback) ->
+    if typeof callback is 'function'
+      @bind 'destroy', callback
+    else
+      @trigger 'destroy'
       
   $: (selector) -> $(selector, @el)
       
   delegateEvents: ->
     for key, method of @events
-      unless typeof(method) is "function"
+      unless typeof(method) is 'function'
         method = @proxy(@[method])
 
       match      = key.match(@eventSplitter)
       eventName  = match[1]
       selector   = match[2]
 
-      if selector is ""
+      if selector is ''
         @el.bind(eventName, method)
-        @bind "destroy", ->
-          @el.unbind(eventName, method)
       else
         @el.delegate(selector, eventName, method)
-        @bind "destroy", ->
-          @el.undelegate(selector, eventName, method)
   
   refreshElements: ->
     for key, value of @elements

  save: ->
    error = @validate()
    if error
      @trigger("error", @, error)
      return false
    
    @trigger("beforeSave", @)
    if @newRecord then @create() else @update()
    @trigger("save", @)
    @

  updateAttribute: (name, value) ->

    @save()
  
  destroy: ->
    @trigger('beforeDestroy', @)
    delete @constructor.records[@id]
    @destroyed = true
    @trigger('destroy', @)
    @trigger('change', @, 'destroy')
    @unbind()
    @

