kero
Version:
<img src="http://tinper.org/assets/images/kero.png" width="120" style="max-width:100%;"/>
209 lines (200 loc) • 5.53 kB
JavaScript
/**
* Module : kero dataTable row
* Author : liuyk(liuyk@yonyou.com)
* Date : 2016-08-01 14:34:01
*/
import { isEmptyObject } from 'tinper-sparrow/src/util';
// 添加数据,建议使用setData或者setSimpleData
var setRows = function setRows(rows, options) {
var insertRows = [],
_id;
for (var i = 0; i < rows.length; i++) {
var r = rows[i];
_id = r.rowId || r.id;
if (!_id) _id = Row.getRandomRowId();
if (r.status == Row.STATUS.DELETE) {
this.removeRowByRowId(_id);
} else {
var row = this.getRowByRowId(_id);
if (row) {
row.updateRow(r);
if (!isEmptyObject(r.data)) {
this.trigger(DataTable.ON_UPDATE, {
index: i,
rows: [row]
});
if (row == this.getCurrentRow()) {
this.currentRowChange(-this.currentRowChange());
row.currentRowChange(-row.currentRowChange());
this.trigger(DataTable.ON_CURRENT_UPDATE, {
index: i,
rows: [row]
});
} else {
row.currentRowChange(-row.currentRowChange());
}
}
} else {
row = new Row({
parent: this,
id: _id
});
row.setData(rows[i], null, options);
insertRows.push(row);
}
// 如果r对象中存在状态则更新状态为返回的状态
if (r.status) {
row.setStatus(r.status);
}
}
}
if (insertRows.length > 0) this.addRows(insertRows);
return insertRows;
};
/**
* 在最后位置添加一条数据行
* @memberof DataTable
* @param {u.Row} row 数据行
* @example
* var row1 = new Row({parent: datatable})
* row1.setData({
* data:{
* field1: 'value1',
* field2: 'value2'
* }
* })
* datatable.addRow(row1)
*/
var addRow = function addRow(row) {
this.insertRow(this.rows().length, row);
this.resetDelRowEnd();
};
var resetDelRowEnd = function resetDelRowEnd() {
for (var i = this.rows().length - 1; i > -1; i--) {
var row = this.rows()[i];
if (row.status == Row.STATUS.DELETE || row.status == Row.STATUS.FALSE_DELETE) {
this.rows().splice(i, 1);
this.rows().push(row);
}
}
};
/**
* 在最后位置添加多条数据行
* @memberof DataTable
* @param {array} rows 数据行数组
* @example
* var row1 = new Row({parent: datatable})
* row1.setData({
* data:{
* field1: 'value1',
* field2: 'value2'
* }
* })
* var row2 = new Row({parent: datatable})
* row2.setData({
* data:{
* field1: 'value11',
* field2: 'value22'
* }
* })
* datatable.addRows([row1,row2])
*/
var addRows = function addRows(rows) {
this.insertRows(this.rows().length, rows);
this.resetDelRowEnd();
};
/**
* 在指定索引位置添加一条数据行
* @memberof DataTable
* @param {number} index 指定索引
* @param {u.Row} row 数据行
* @example
* var row1 = new Row({parent: datatable})
* row1.setData({
* data:{
* field1: 'value1',
* field2: 'value2'
* }
* })
* datatable.insertRow(1,row1)
*/
var insertRow = function insertRow(index, row) {
if (!row) {
row = new Row({
parent: this
});
}
this.insertRows(index, [row]);
};
/**
* 在指定索引位置添加多条数据行
* @memberof DataTable
* @param {number} index 指定索引
* @param {array} rows 数据行数组
* var row1 = new Row({parent: datatable})
* row1.setData({
* data:{
* field1: 'value1',
* field2: 'value2'
* }
* })
* var row2 = new Row({parent: datatable})
* row2.setData({
* data:{
* field1: 'value11',
* field2: 'value22'
* }
* })
* datatable.insertRows(1,[row1,row2])
*/
var insertRows = function insertRows(index, rows) {
var args = [index, 0];
for (var i = 0; i < rows.length; i++) {
args.push(rows[i]);
}
this.rows.splice.apply(this.rows, args);
this.updateSelectedIndices(index, '+', rows.length);
this.updateFocusIndex(index, '+', rows.length);
this.updatePageAll();
var insertRows = [];
$.each(rows, function (i) {
if (this.status == Row.STATUS.NORMAL || this.status == Row.STATUS.UPDATE || this.status == Row.STATUS.NEW) {
insertRows.push(this);
}
});
this.trigger(DataTable.ON_INSERT, {
index: index,
rows: insertRows
});
if (this.ns) {
if (this.root.valueChange[this.ns]) this.root.valueChange[this.ns](-this.root.valueChange[this.ns]());
}
};
/**
* 创建空行
* @memberof DataTable
* @return {u.Row} 空行对象
* @example
* datatable.createEmptyRow();
* datatable.createEmptyRow({unSelect:true})
*/
var createEmptyRow = function createEmptyRow(options) {
var r = new Row({
parent: this
});
this.addRow(r);
var unSelect = options ? options.unSelect : false;
if (!unSelect) {
if (!this.getCurrentRow()) this.setRowSelect(r);
}
return r;
};
export var rowFunObj = {
setRows: setRows,
addRow: addRow,
addRows: addRows,
insertRow: insertRow,
insertRows: insertRows,
createEmptyRow: createEmptyRow,
resetDelRowEnd: resetDelRowEnd
};