     subview.set('superview', this)
     subview.fire('viewDidMoveToSuperview')
 
+    @prevent('childViewsReady')
+    subview.once('ready', @_fireChildViewsReady ||= => @allowAndFire('childViewsReady'))
+
     isInDOM = @get('isInDOM')
     subview.fire('viewWillAppear') if isInDOM
 

    if isInDOM
      subview.fire('viewDidAppear')
    else
      @on 'viewWillAppear', subview._fireViewWillAppear ||= -> subview.fire('viewWillAppear')
      @on 'viewDidAppear', subview._fireViewDidAppear ||= -> subview.fire('viewDidAppear')

  _removeFromSuperview: ->
    @fire('viewWillRemoveFromSuperview')

    superview = @get('superview')
    superview.off('viewWillAppear', subview._fireViewWillAppear)
    superview.off('viewDidAppear', subview._fireViewDidAppear)

    isInDOM = @get('isInDOM')
    @fire('viewWillDisappear') if isInDOM

    return view if view = Batman._data(node, 'view')
    node = node.parentNode

Batman.container.$subviews ?= (view = Batman.currentApp.layout) ->
  subviews = {}

  view.subviews.forEach (key, subview) ->
