 
   # Syncs up the view binding with the model.
   sync: =>
-    if @model isnt @observer.target
-      observer.unobserve() for observer in @dependencies
-      @dependencies = []
-
-      if (@model = @observer.target)? and @options.dependencies?.length
-        for dependency in @options.dependencies
-          observer = @observe @model, dependency, @sync
-          @dependencies.push observer
-
-    @set @observer.value()
+    @set if @observer
+      if @model isnt @observer.target
+        observer.unobserve() for observer in @dependencies
+        @dependencies = []
+
+        if (@model = @observer.target)? and @options.dependencies?.length
+          for dependency in @options.dependencies
+            observer = @observe @model, dependency, @sync
+            @dependencies.push observer
+
+      @observer.value()
+    else
+      @value
 
   # Publishes the value currently set on the input element back to the model.
   publish: =>
-    value = Rivets.Util.getInputValue @el
-
-    for formatter in @formatters.slice(0).reverse()
-      args = formatter.split /\s+/
-      id = args.shift()
-
-      if @view.formatters[id]?.publish
-        value = @view.formatters[id].publish value, args...
-
-    @observer.setValue value
+    if @observer
+      value = Rivets.Util.getInputValue @el
+
+      for formatter in @formatters.slice(0).reverse()
+        args = formatter.split /\s+/
+        id = args.shift()
+
+        if @view.formatters[id]?.publish
+          value = @view.formatters[id].publish value, args...
+
+      @observer.setValue value
 
   # Subscribes to the model for changes at the specified keypath. Bi-directional
   # routines will also listen for changes on the element to propagate them back
   # to the model.
   bind: =>
     @binder.bind?.call @, @el
-    @observer = @observe @view.models, @keypath, @sync
-    @model = @observer.target
+    @parseTarget()
 
     if @model? and @options.dependencies?.length
       for dependency in @options.dependencies

      root: @view.rootInterface
      adapters: @view.adapters

  # Applies all the current formatters to the supplied value and returns the
  # formatted value.
  formattedValue: (value) =>

  # Unsubscribes from the model and the element.
  unbind: =>
    @binder.unbind?.call @, @el
    @observer?.unobserve()

    observer.unobserve() for observer in @dependencies
    @dependencies = []
