UNPKG

5.3 kBJavaScriptView Raw
1/**
2 * Module : kero dataTable row
3 * Author : liuyk(liuyk@yonyou.com)
4 * Date : 2016-08-01 14:34:01
5 */
6import { isEmptyObject } from 'tinper-sparrow/src/util';
7
8// 添加数据,建议使用setData或者setSimpleData
9var setRows = function setRows(rows, options) {
10 var insertRows = [],
11 _id;
12 for (var i = 0; i < rows.length; i++) {
13 var r = rows[i];
14 _id = r.rowId || r.id;
15 if (!_id) _id = Row.getRandomRowId();
16 if (r.status == Row.STATUS.DELETE) {
17 this.removeRowByRowId(_id);
18 } else {
19 var row = this.getRowByRowId(_id);
20 if (row) {
21 row.updateRow(r);
22 if (!isEmptyObject(r.data)) {
23 this.trigger(DataTable.ON_UPDATE, {
24 index: i,
25 rows: [row]
26 });
27 if (row == this.getCurrentRow()) {
28 this.currentRowChange(-this.currentRowChange());
29 row.currentRowChange(-row.currentRowChange());
30 this.trigger(DataTable.ON_CURRENT_UPDATE, {
31 index: i,
32 rows: [row]
33 });
34 } else {
35 row.currentRowChange(-row.currentRowChange());
36 }
37 }
38 } else {
39 row = new Row({
40 parent: this,
41 id: _id
42 });
43 row.setData(rows[i], null, options);
44 insertRows.push(row);
45 }
46 // 如果r对象中存在状态则更新状态为返回的状态
47 if (r.status) {
48 row.setStatus(r.status);
49 }
50 }
51 }
52 if (insertRows.length > 0) this.addRows(insertRows);
53 return insertRows;
54};
55
56/**
57 * 在最后位置添加一条数据行
58 * @memberof DataTable
59 * @param {u.Row} row 数据行
60 * @example
61 * var row1 = new Row({parent: datatable})
62 * row1.setData({
63 * data:{
64 * field1: 'value1',
65 * field2: 'value2'
66 * }
67 * })
68 * datatable.addRow(row1)
69 */
70var addRow = function addRow(row) {
71 this.insertRow(this.rows().length, row);
72 this.resetDelRowEnd();
73};
74
75var resetDelRowEnd = function resetDelRowEnd() {
76 for (var i = this.rows().length - 1; i > -1; i--) {
77 var row = this.rows()[i];
78 if (row.status == Row.STATUS.DELETE || row.status == Row.STATUS.FALSE_DELETE) {
79 this.rows().splice(i, 1);
80 this.rows().push(row);
81 }
82 }
83};
84
85/**
86 * 在最后位置添加多条数据行
87 * @memberof DataTable
88 * @param {array} rows 数据行数组
89 * @example
90 * var row1 = new Row({parent: datatable})
91 * row1.setData({
92 * data:{
93 * field1: 'value1',
94 * field2: 'value2'
95 * }
96 * })
97 * var row2 = new Row({parent: datatable})
98 * row2.setData({
99 * data:{
100 * field1: 'value11',
101 * field2: 'value22'
102 * }
103 * })
104 * datatable.addRows([row1,row2])
105 */
106var addRows = function addRows(rows) {
107 this.insertRows(this.rows().length, rows);
108 this.resetDelRowEnd();
109};
110
111/**
112 * 在指定索引位置添加一条数据行
113 * @memberof DataTable
114 * @param {number} index 指定索引
115 * @param {u.Row} row 数据行
116 * @example
117 * var row1 = new Row({parent: datatable})
118 * row1.setData({
119 * data:{
120 * field1: 'value1',
121 * field2: 'value2'
122 * }
123 * })
124 * datatable.insertRow(1,row1)
125 */
126var insertRow = function insertRow(index, row) {
127 if (!row) {
128 row = new Row({
129 parent: this
130 });
131 }
132 this.insertRows(index, [row]);
133};
134
135/**
136 * 在指定索引位置添加多条数据行
137 * @memberof DataTable
138 * @param {number} index 指定索引
139 * @param {array} rows 数据行数组
140 * var row1 = new Row({parent: datatable})
141 * row1.setData({
142 * data:{
143 * field1: 'value1',
144 * field2: 'value2'
145 * }
146 * })
147 * var row2 = new Row({parent: datatable})
148 * row2.setData({
149 * data:{
150 * field1: 'value11',
151 * field2: 'value22'
152 * }
153 * })
154 * datatable.insertRows(1,[row1,row2])
155 */
156var insertRows = function insertRows(index, rows) {
157 var args = [index, 0];
158 for (var i = 0; i < rows.length; i++) {
159 args.push(rows[i]);
160 }
161 this.rows.splice.apply(this.rows, args);
162
163 this.updateSelectedIndices(index, '+', rows.length);
164 this.updateFocusIndex(index, '+', rows.length);
165 this.updatePageAll();
166 this.trigger(DataTable.ON_INSERT, {
167 index: index,
168 rows: rows
169 });
170 if (this.ns) {
171 if (this.root.valueChange[this.ns]) this.root.valueChange[this.ns](-this.root.valueChange[this.ns]());
172 }
173};
174
175/**
176 * 创建空行
177 * @memberof DataTable
178 * @return {u.Row} 空行对象
179 * @example
180 * datatable.createEmptyRow();
181 * datatable.createEmptyRow({unSelect:true})
182 */
183var createEmptyRow = function createEmptyRow(options) {
184 var r = new Row({
185 parent: this
186 });
187 this.addRow(r);
188 var unSelect = options ? options.unSelect : false;
189 if (!unSelect) {
190 if (!this.getCurrentRow()) this.setRowSelect(r);
191 }
192 return r;
193};
194
195export var rowFunObj = {
196 setRows: setRows,
197 addRow: addRow,
198 addRows: addRows,
199 insertRow: insertRow,
200 insertRows: insertRows,
201 createEmptyRow: createEmptyRow,
202 resetDelRowEnd: resetDelRowEnd
203};
\No newline at end of file