code: function(target, propertyName, eventName) {
  		var self = this,
  			handler;
  
  
  		// This is objects that can be bound to with can.bind.
  		handler = function () {
  			self.updater(self._get(), self.value);
  		};
  		this._get = function() {
  			return getObject(target, propertyName);
  		};
  		this._set = function(value) {
  			// allow setting properties n levels deep, if separated with dot syntax
  			var properties = propertyName.split("."),
  				leafPropertyName = properties.pop();
  
  			if(properties.length) {
  				var targetProperty = getObject(target, properties.join('.'));
  				targetProperty[leafPropertyName] = value;
  			} else {
  				target[propertyName] = value;
  			}
  		};
  
  		this._on = function(update) {
  			eventQueue.on.call(target, eventName || propertyName, handler);
  			// Set the cached value
  			this.value = this._get();
  		};
  		this._off = function() {
  			return eventQueue.off.call( target, eventName || propertyName, handler);
  		};
  	}
docs: ## Setup property computes Listen to a property changing on an object.