 
         Rivets.config.adapter.subscribe model, keypath, @sync
 
-
   # Unsubscribes from the model and the element.
   unbind: =>
     unless @options.bypass
+      @binder.unbind?.call @, @el
       Rivets.config.adapter.unsubscribe @model, @keypath, @sync
-
-      if @isBidirectional()
-        unbindEvent @el 'change', @publish
 
     if @options.dependencies?.length
       for keypath in @options.dependencies

    if @options.bypass
      @sync()
    else
      Rivets.config.adapter.subscribe @model, @keypath, @sync
      @sync() if Rivets.config.preloadData

      if @isBidirectional()
        bindEvent @el, 'change', @publish

    if @options.dependencies?.length
      for dependency in @options.dependencies

              if dependencies = context.shift()
                options.dependencies = dependencies.split /\s+/

              binding = new Rivets.Binding node, type, model, keypath, options
              binding.view = @

              @bindings.push binding

        attributes = null if attributes

      return

    for el in @els
      parseNode el
      parseNode node for node in el.getElementsByTagName '*'

    return

  # Returns an array of bindings where the supplied function evaluates to true.
