public/lib/emberjs/ember.js
function(content, start, removed, added) {
        var addedViews = [];
        var view, item, idx, len, itemViewClass, emptyView;

        len = content ? get(content, 'length') : 0;

        if (len) {
          itemViewClass = get(this, 'itemViewClass');
          itemViewClass = handlebarsGetView(content, itemViewClass, this.container);

          for (idx = start; idx < start+added; idx++) {
            item = content.objectAt(idx);

            view = this.createChildView(itemViewClass, {
              content: item,
              contentIndex: idx
            });

            addedViews.push(view);
          }
        } else {
          emptyView = get(this, 'emptyView');

          if (!emptyView) { return; }

          if ('string' === typeof emptyView && isGlobalPath(emptyView)) {
            emptyView = get(emptyView) || emptyView;
          }

          emptyView = this.createChildView(emptyView);
          addedViews.push(emptyView);
          set(this, 'emptyView', emptyView);

          if (CoreView.detect(emptyView)) {
            this._createdEmptyView = emptyView;
          }
        }

        this.replace(start, 0, addedViews);
      }
function(content, start, removed, added) {
        var addedViews = [];
        var view, item, idx, len, itemViewClass, emptyView;

        len = content ? get(content, 'length') : 0;

        if (len) {
          itemViewClass = get(this, 'itemViewClass');
          itemViewClass = handlebarsGetView(content, itemViewClass, this.container);

          for (idx = start; idx < start+added; idx++) {
            item = content.objectAt(idx);

            view = this.createChildView(itemViewClass, {
              content: item,
              contentIndex: idx
            });

            addedViews.push(view);
          }
        } else {
          emptyView = get(this, 'emptyView');

          if (!emptyView) { return; }

          if ('string' === typeof emptyView && isGlobalPath(emptyView)) {
            emptyView = get(emptyView) || emptyView;
          }

          emptyView = this.createChildView(emptyView);
          addedViews.push(emptyView);
          set(this, 'emptyView', emptyView);

          if (CoreView.detect(emptyView)) {
            this._createdEmptyView = emptyView;
          }
        }

        this.replace(start, 0, addedViews);
      }
function ( content , start , removed , added ) { var addedViews = [ ] ; var view , item , idx , len , itemViewClass , emptyView ; len = content ? get ( content , 'length' ) : 0 ; if ( len ) { itemViewClass = get ( this , 'itemViewClass' ) ; itemViewClass = handlebarsGetView ( content , itemViewClass , this . container ) ; for ( idx = start ; idx < start + added ; idx ++ ) { item = content . objectAt ( idx ) ; view = this . createChildView ( itemViewClass , { content : item , contentIndex : idx } ) ; addedViews . push ( view ) ; } } else { emptyView = get ( this , 'emptyView' ) ; if ( ! emptyView ) { return ; } if ( 'string' === typeof emptyView && isGlobalPath ( emptyView ) ) { emptyView = get ( emptyView ) || emptyView ; } emptyView = this . createChildView ( emptyView ) ; addedViews . push ( emptyView ) ; set ( this , 'emptyView' , emptyView ) ; if ( CoreView . detect ( emptyView ) ) { this . _createdEmptyView = emptyView ; } } this . replace ( start , 0 , addedViews ) ; }
Called when a mutation to the underlying content array occurs.

This method will replay that mutation against the views that compose the
`Ember.CollectionView`, ensuring that the view reflects the model.

This array observer is added in `contentDidChange`.

@method arrayDidChange
@param {Array} content the managed collection of objects
@param {Number} start the index at which the changes occurred
@param {Number} removed number of object removed from content
@param {Number} added number of object added to content
Called when a mutation to the underlying content array occurs .