code: function suspendListener(obj, eventName, target, method, callback) {
    if (!method && 'function' === typeof target) {
      method = target;
      target = null;
    }
  
    var actions = actionsFor(obj, eventName),
        actionIndex = indexOf(actions, target, method),
        action;
  
    if (actionIndex !== -1) {
      action = actions[actionIndex].slice(); // copy it, otherwise we're modifying a shared object
      action[3] = true; // mark the action as suspended
      actions[actionIndex] = action; // replace the shared object with our copy
    }
  
    function tryable()   { return callback.call(target); }
    function finalizer() { if (action) { action[3] = undefined; } }
  
    return Ember.tryFinally(tryable, finalizer);
  }
docs: @private
  
  Suspend listener during callback.
  
  This should only be used by the target of the event listener
  when it is taking an action that would cause the event, e.g.
  an object might suspend its property change listener while it is
  setting that property.
  
  @method suspendListener
  @for Ember
  @param obj
  @param {String} eventName
  @param {Object|Function} targetOrMethod A target object or a function
  @param {Function|String} method A function or the name of a function to be called on `target`
  @param {Function} callback