code: function() {
      // calling this._super() will nuke computed properties and observers,
      // so collect any information we need before calling super.
      var childViews = this._childViews,
          parent     = get(this, '_parentView'),
          childLen;
  
      // destroy the element -- this will avoid each child view destroying
      // the element over and over again...
      if (!this.removedFromDOM) { this.destroyElement(); }
  
      // remove from non-virtual parent view if viewName was specified
      if (this.viewName) {
        var nonVirtualParentView = get(this, 'parentView');
        if (nonVirtualParentView) {
          set(nonVirtualParentView, this.viewName, null);
        }
      }
  
      // remove from parent if found. Don't call removeFromParent,
      // as removeFromParent will try to remove the element from
      // the DOM again.
      if (parent) { parent.removeChild(this); }
  
      this.state = 'destroyed';
  
      childLen = childViews.length;
      for (var i=childLen-1; i>=0; i--) {
        childViews[i].removedFromDOM = true;
        childViews[i].destroy();
      }
  
      // next remove view from global hash
      if (!this.isVirtual) delete Ember.View.views[get(this, 'elementId')];
    }
docs: You must call `destroy` on a view to destroy the view (and all of its
  child views). This will remove the view from any parent node, then make
  sure that the DOM element managed by the view can be released by the
  memory manager.