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

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

    if (len) {
      itemViewClass = get(this, 'itemViewClass');

      if ('string' === typeof itemViewClass) {
        itemViewClass = get(itemViewClass) || itemViewClass;
      }

      Ember.assert(fmt("itemViewClass must be a subclass of Ember.View, not %@",
                       [itemViewClass]),
                       'string' === typeof itemViewClass || Ember.View.detect(itemViewClass));

      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) {
        emptyView = get(emptyView) || emptyView;
      }

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

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

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

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

    if (len) {
      itemViewClass = get(this, 'itemViewClass');

      if ('string' === typeof itemViewClass) {
        itemViewClass = get(itemViewClass) || itemViewClass;
      }

      Ember.assert(fmt("itemViewClass must be a subclass of Ember.View, not %@",
                       [itemViewClass]),
                       'string' === typeof itemViewClass || Ember.View.detect(itemViewClass));

      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) {
        emptyView = get(emptyView) || emptyView;
      }

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

      if (Ember.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