UNPKG

15.1 kBJavaScriptView Raw
1/**
2 * Module : kero DataTable getData
3 * Author : liuyk(liuyk@yonyou.com)
4 * Date : 2016-07-30 14:34:01
5 */
6
7/**
8 * 获取DataTable的数据信息
9 * @memberof DataTable
10 * @return {array} 数据信息对应的数组,每项对应一条数据
11 * @example
12 * datatable.getData()
13 */
14var getData = function getData() {
15 var datas = [],
16 rows = this.rows();
17 for (var i = 0; i < rows.length; i++) {
18 datas.push(rows[i].getData());
19 }
20 return datas;
21};
22
23// 将page转为row对象格式
24var page2data = function page2data(page, pageIndex) {
25 var data = {};
26 data.focus = page.focus;
27 data.index = pageIndex;
28 data.select = page.selectedIndices;
29 return data;
30};
31
32/**
33 * 按照特定规则获取数据
34 * @memberof DataTable
35 * @param {string} rule
36 * DataTable.SUBMIT.current('current') :当前选中行
37 * DataTable.SUBMIT.focus('focus') :当前focus行
38 * DataTable.SUBMIT.all('all') :所有行
39 * DataTable.SUBMIT.select('select') :当前页选中行
40 * DataTable.SUBMIT.change('change') :发生改变的行
41 * DataTable.SUBMIT.empty('empty') :不获取数据,返回空数组
42 * DataTable.SUBMIT.allSelect('allSelect') :所有页选中行
43 * DataTable.SUBMIT.allPages('allPages') :所有页的数据
44 * @return {array} 按照规则获取到的数据信息
45 * @example
46 * datatable.getDataByRule(‘all’)
47 */
48
49var getDataByRule = function getDataByRule(rule) {
50 var returnData = {},
51 datas = null,
52 rows;
53 returnData.meta = this.meta;
54 returnData.params = this.params;
55 rule = rule || DataTable.SUBMIT.current;
56 // 存在多页及不存在多页分开处理
57 if (this.pageCache) {
58 var pages = this.getPages();
59 if (rule == DataTable.SUBMIT.current || rule == DataTable.SUBMIT.focus) {
60 datas = [];
61 var pageIndex = this.pageIndex();
62 var currPage = pages[pageIndex];
63 if (currPage) {
64 var currIndex = this.focusIndex();
65 if (rule == DataTable.SUBMIT.current) {
66 if (currIndex == -1) currIndex = this.getSelectedIndex();
67 }
68 var data = page2data(currPage, pageIndex);
69 data.rows = [];
70 for (var i = 0, count = currPage.rows.length; i < count; i++) {
71 var row = currPage.rows[i].getData();
72 if (i != currIndex) row.data = {};
73 data.rows.push(row);
74 }
75 datas.push(data);
76 }
77 } else if (rule == DataTable.SUBMIT.all || rule == DataTable.SUBMIT.allPages) {
78 datas = [];
79 for (var i = 0; i < pages.length; i++) {
80 var currPage = pages[i];
81 var data = page2data(currPage, i);
82 data.rows = [];
83 for (var i = 0; i < currPage.rows.length; i++) {
84 data.rows.push(currPage.rows[i].getData());
85 }
86 datas.push(data);
87 }
88 } else if (rule == DataTable.SUBMIT.select) {
89 datas = [];
90 var pageIndex = this.pageIndex();
91 var currPage = pages[pageIndex];
92 if (currPage) {
93 var data = page2data(currPage, pageIndex);
94 data.rows = [];
95 for (var i = 0, count = currPage.rows.length; i < count; i++) {
96 var row = currPage.rows[i].getData();
97 if (data.select.indexOf(i) < 0) row.data = {};
98 data.rows.push(row);
99 }
100 datas.push(data);
101 }
102 } else if (rule == DataTable.SUBMIT.allSelect) {
103 datas = [];
104 for (var i = 0; i < pages.length; i++) {
105 var currPage = pages[i];
106 var data = page2data(currPage, i);
107 data.rows = [];
108 for (var j = 0, count = currPage.rows.length; j < count; j++) {
109 var row = currPage.rows[j].getData();
110 if (data.select.indexOf(j) < 0) row.data = {};
111 data.rows.push(row);
112 }
113 datas.push(data);
114 }
115 } else if (rule == DataTable.SUBMIT.change) {
116 datas = [];
117 for (var i = 0; i < pages.length; i++) {
118 var currPage = pages[i];
119 var data = page2data(currPage, i);
120 data.rows = [];
121 for (var j = 0, count = currPage.rows.length; j < count; j++) {
122 var row = currPage.rows[j].getData();
123 if (row.status == Row.STATUS.NORMAL) {
124 row.data = {};
125 }
126 data.rows.push(row);
127 }
128 datas.push(data);
129 }
130 } else if (rule === DataTable.SUBMIT.empty) {
131 datas = [];
132 }
133 if (pages.length < 1 || !pages[this.pageIndex()]) {
134 datas = [{
135 index: this.pageIndex(),
136 select: [],
137 focus: -1,
138 rows: []
139 }];
140 }
141 returnData.pages = datas;
142 } else {
143 if (rule == DataTable.SUBMIT.current) {
144 datas = [];
145 var currIndex = this.focusIndex();
146 if (currIndex == -1) currIndex = this.getSelectedIndex();
147 rows = this.rows();
148 for (var i = 0, count = rows.length; i < count; i++) {
149 if (i == currIndex) datas.push(rows[i].getData());else datas.push(rows[i].getEmptyData());
150 }
151 } else if (rule == DataTable.SUBMIT.focus) {
152 datas = [];
153 rows = this.rows();
154 for (var i = 0, count = rows.length; i < count; i++) {
155 if (i == this.focusIndex()) datas.push(rows[i].getData());else datas.push(rows[i].getEmptyData());
156 }
157 } else if (rule == DataTable.SUBMIT.all) {
158 datas = this.getData();
159 } else if (rule == DataTable.SUBMIT.select) {
160 datas = this.getSelectedDatas(true);
161 } else if (rule == DataTable.SUBMIT.change) {
162 datas = this.getChangedDatas();
163 } else if (rule === DataTable.SUBMIT.empty) {
164 datas = [];
165 }
166
167 returnData.rows = datas;
168 returnData.select = this.getSelectedIndexs();
169 returnData.focus = this.getFocusIndex();
170 }
171
172 returnData.pageSize = this.pageSize();
173 returnData.pageIndex = this.pageIndex();
174 returnData.isChanged = this.isChanged();
175 returnData.master = this.master;
176 returnData.pageCache = this.pageCache;
177 return returnData;
178};
179
180/**
181 * 根据索引获取指定行数据信息
182 * @memberof DataTable
183 * @param {number} index 需要获取的数据信息的索引
184 * @return {object} 获取到的指定行数据信息
185 * @example
186 * datatable.getRow(1)
187 */
188var getRow = function getRow(index) {
189 //return this.rows()[index] //modify by licza. improve performance
190 return this.rows.peek()[index];
191};
192
193// 获取子表的数据行
194var getChildRow = function getChildRow(obj) {
195 var fullField = obj.fullField,
196 index = obj.index,
197 row = null;
198 if (parseInt(index) > -1) {
199 if ((index + '').indexOf('.') > 0) {
200 var fieldArr = fullField.split('.');
201 var indexArr = index.split('.');
202 var nowDataTable = this;
203 var nowRow = null;
204 for (var i = 0; i < indexArr.length; i++) {
205 nowRow = nowDataTable.getRow(indexArr[i]);
206 if (i < indexArr.length - 1) {
207 if (nowRow) {
208 nowDataTable = nowRow.getValue(fieldArr[i]);
209 } else {
210 nowRow = null;
211 break;
212 }
213 }
214 }
215 row = nowRow;
216 } else {
217 row = this.getRow(index);
218 }
219 }
220 return row;
221};
222
223/**
224 * 根据rowid获取Row对象
225 * @memberof DataTable
226 * @param {string} rowid 需要获取的Row对应的rowid
227 * @returns {Row}
228 * @example
229 * datatable.getRowByRowId('rowid')
230 */
231var getRowByRowId = function getRowByRowId(rowid) {
232 var rows = this.rows.peek();
233 for (var i = 0, count = rows.length; i < count; i++) {
234 if (rows[i].rowId == rowid) return rows[i];
235 }
236 return null;
237};
238
239/**
240 * 获取Row对象对应的索引
241 * @memberof DataTable
242 * @param {u.Row} 需要获取索引的row对象
243 * @returns {*}
244 * @example
245 * var row = datatable.getRow(1)
246 * datatable.getRowIndex(row) // 1
247 */
248var getRowIndex = function getRowIndex(row) {
249 var rows = this.rows.peek();
250 for (var i = 0, count = rows.length; i < count; i++) {
251 if (rows[i].rowId === row.rowId) return i;
252 }
253 return -1;
254};
255
256/**
257 * 根据字段及字段值获取所有数据行
258 * @memberof DataTable
259 * @param {string} field 需要获取行的对应字段
260 * @param {string} value 需要获取行的对应字段值
261 * @return {array} 根据字段及字段值获取的所有数据行
262 * @example
263 * datatable.getRowsByField('field1','value1')
264 */
265var getRowsByField = function getRowsByField(field, value) {
266 var rows = this.rows.peek();
267 var returnRows = new Array();
268 for (var i = 0, count = rows.length; i < count; i++) {
269 if (rows[i].getValue(field) === value) returnRows.push(rows[i]);
270 }
271 return returnRows;
272};
273
274/**
275 * 根据字段及字段值获取第一条数据行
276 * @memberof DataTable
277 * @param {string} field 需要获取行的对应字段
278 * @param {string} value 需要获取行的对应字段值
279 * @return {u.Row} 根据字段及字段值获取第一条数据行
280 * @example
281 * datatable.getRowByField('field1','value1')
282 */
283var getRowByField = function getRowByField(field, value) {
284 var rows = this.rows.peek();
285 for (var i = 0, count = rows.length; i < count; i++) {
286 if (rows[i].getValue(field) === value) return rows[i];
287 }
288 return null;
289};
290
291/**
292 * 获取当前页的所有数据行
293 * @memberof DataTable
294 * @return {array} 获取到的数据行
295 * @example
296 * datatable.getAllRows()
297 */
298var getAllRows = function getAllRows() {
299 return this.rows.peek();
300};
301
302/**
303 * 获取所有页的所有数据行
304 * @memberof DataTable
305 * @return {array} 获取到的数据行
306 * @example
307 * datatable.getAllPageRows()
308 */
309var getAllPageRows = function getAllPageRows() {
310 var datas = [],
311 rows;
312 for (var i = 0; i < this.totalPages(); i++) {
313 rows = [];
314 if (i == this.pageIndex()) {
315 rows = this.getData();
316 } else {
317 var page = this.cachedPages[i];
318 if (page) {
319 rows = page.getData();
320 }
321 }
322 for (var j = 0; j < rows.length; j++) {
323 datas.push(rows[j]);
324 }
325 }
326 return datas;
327};
328
329/**
330 * 获取发生变化的数据信息
331 * @memberof DataTable
332 * @param {boolean} withEmptyRow=false 未发生变化的数据是否使用空行代替,true表示以空行代替未发生变化行,false相反
333 * @return {array} 发生变化的数据信息
334 * @example
335 * datatable.getChangedDatas()
336 */
337var getChangedDatas = function getChangedDatas(withEmptyRow) {
338 var datas = [],
339 rows = this.rows();
340 for (var i = 0, count = rows.length; i < count; i++) {
341 if (rows[i] && rows[i].status != Row.STATUS.NORMAL) {
342 datas.push(rows[i].getData());
343 } else if (withEmptyRow == true) {
344 datas.push(rows[i].getEmptyData());
345 }
346 }
347 return datas;
348};
349
350/**
351 * 获取发生改变的Row对象
352 * @memberof DataTable
353 * @return {array} 发生改变的Row对象
354 * @example
355 * datatable.getChangedRows()
356 */
357var getChangedRows = function getChangedRows() {
358 var changedRows = [],
359 rows = this.rows.peek();
360 for (var i = 0, count = rows.length; i < count; i++) {
361 if (rows[i] && rows[i].status != Row.STATUS.NORMAL) {
362 changedRows.push(rows[i]);
363 }
364 }
365 return changedRows;
366};
367
368var getDeleteRows = function getDeleteRows() {
369 var deleteRows = [],
370 rows = this.rows.peek();
371 for (var i = 0, count = rows.length; i < count; i++) {
372 if (rows[i] && rows[i].status == Row.STATUS.FALSE_DELETE) {
373 deleteRows.push(rows[i]);
374 }
375 }
376 return deleteRows;
377};
378
379/**
380 * 根据字段获取对应Row对象的字段值
381 * @memberof DataTable
382 * @param {string} fieldName 需要获取的值对应的字段
383 * @param {u.Row} [row=默认为当前行] 对应的数据行
384 * @return {string} 获取到的字段值
385 * @example
386 * datatable.getValue('field1')
387 * var row = datatable.getRow(1)
388 * datatable.getValue('field1',row)
389 */
390var getValue = function getValue(fieldName, row) {
391 row = row || this.getCurrentRow();
392 if (row) return row.getValue(fieldName);else return '';
393};
394
395/**
396 * 根据行号获取行索引
397 * @memberof DataTable
398 * @param {String} rowId
399 * @example
400 * datatable.getIndexByRowId('rowid')
401 */
402var getIndexByRowId = function getIndexByRowId(rowId) {
403 var rows = this.rows();
404 for (var i = 0, count = rows.length; i < count; i++) {
405 if (rows[i].rowId == rowId) return i;
406 }
407 return -1;
408};
409
410/**
411 * 获取所有行数据信息
412 * @memberof DataTable
413 * @return {array} 所有行数据信息
414 * @example
415 * datatable.getAllDatas()
416 */
417var getAllDatas = function getAllDatas() {
418 var rows = this.getAllRows();
419 var datas = [];
420 for (var i = 0, count = rows.length; i < count; i++) {
421 if (rows[i]) datas.push(rows[i].getData());
422 }return datas;
423};
424
425/**
426 * 根据索引获取rowid
427 * @memberof DataTable
428 * @param {array} indices 需要获取rowid的索引值
429 * @return {array} 获取到的rowid
430 * @example
431 * datatable.getRowIdsByIndices([1,2,5])
432 */
433var getRowIdsByIndices = function getRowIdsByIndices(indices) {
434 var rowIds = [];
435 for (var i = 0; i < indices.length; i++) {
436 if (this.getRow(indices[i])) rowIds.push(this.getRow(indices[i]).rowId);
437 }
438 return rowIds;
439};
440/**
441 * 根据索引获取row
442 * @memberof DataTable
443 * @param {array} indices 需要获取rowid的索引值
444 * @return {array} 获取到的row
445 * @example
446 * datatable.getRowIdsByIndices([1,2,5])
447 */
448var getRowsByIndices = function getRowsByIndices(indices) {
449 var rows = [];
450 for (var i = 0; i < indices.length; i++) {
451 rows.push(this.getRow(indices[i]));
452 }
453 return rows;
454};
455
456export var getDataFunObj = {
457 getData: getData,
458 getDataByRule: getDataByRule,
459 getRow: getRow,
460 getChildRow: getChildRow,
461 getRowByRowId: getRowByRowId,
462 getRowIndex: getRowIndex,
463 getRowsByField: getRowsByField,
464 getRowByField: getRowByField,
465 getAllRows: getAllRows,
466 getAllPageRows: getAllPageRows,
467 getChangedDatas: getChangedDatas,
468 getChangedRows: getChangedRows,
469 getDeleteRows: getDeleteRows,
470 getValue: getValue,
471 getIndexByRowId: getIndexByRowId,
472 getAllDatas: getAllDatas,
473 getRowIdsByIndices: getRowIdsByIndices,
474 getRowsByIndices: getRowsByIndices
475};
\No newline at end of file