UNPKG

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