code: function(row, collection, options) {
      var self = this;
      var tr = new self.rowView({
        model: row,
        order: this.model.columnNames(),
        row_header: this.options.row_header
      });
      tr.tableView = this;
  
      tr.bind('clean', function() {
        var idx = _.indexOf(self.rowViews, tr);
        self.rowViews.splice(idx, 1);
        // update index
        for(var i = idx; i < self.rowViews.length; ++i) {
          self.rowViews[i].$el.attr('data-y', i);
        }
      }, this);
      tr.bind('changeRow', this.rowChanged, this);
      tr.bind('saved', this.rowSynched, this);
      tr.bind('errorSaving', this.rowFailed, this);
      tr.bind('saving', this.rowSaving, this);
      this.retrigger('saving', tr);
  
      tr.render();
      if(options && options.index !== undefined && options.index != self.rowViews.length) {
  
        tr.$el.insertBefore(self.rowViews[options.index].$el);
        self.rowViews.splice(options.index, 0, tr);
        //tr.$el.attr('data-y', options.index);
        // change others view data-y attribute
        for(var i = options.index; i < self.rowViews.length; ++i) {
          self.rowViews[i].$el.attr('data-y', i);
        }
      } else {
        // at the end
        tr.$el.attr('data-y', self.rowViews.length);
        self.$el.append(tr.el);
        self.rowViews.push(tr);
      }
  
      this.trigger('createRow');
    }
docs: add rows