code: function(obj, eventName, callback, queue){
  		if(obj) {
  			var onEvent = obj[canSymbol.for("can.onEvent")];
  			if(onEvent !== undefined) {
  				return onEvent.call(obj, eventName, callback, queue);
  			} else if(obj.addEventListener) {
  				obj.addEventListener(eventName, callback, queue);
  			}
  		}
  	}
docs: EVENT 
  @function {Object, String, function(*)} can-reflect/observe.onEvent onEvent
  @parent can-reflect/observe
  @description  Register a named event handler on an observable object
  
  @signature `onEvent(obj, eventName, callback)`
  
  
  Register an event handler on the object `obj` to trigger when the event `eventName` is dispatched.
  `obj` *must* implement [can-symbol/symbols/onKeyValue @@@@can.onEvent] or `.addEventListener()` to be compatible
  with can-reflect.onKeyValue.  The function passed as `callback` will receive the event descriptor as the first
  argument, and any data passed to the event dispatch as subsequent arguments.
  
  ```js
  var obj = new DefineMap({ foo: "bar" });
  canReflect.onEvent(obj, "foo", function(ev, newVal, oldVal) {
  console.log("foo is now", newVal, ", was", oldVal);
  });
  
  canEvent.dispatch.call(obj, "foo", ["baz", "quux"]);  // -> logs "foo is now baz , was quux"
  ```
  
  @param {Object} obj the object to bind a new event handler to
  @param {String} eventName the name of the event to bind the handler to
  @param {function(*)} callback  the handler function to bind to the event