UNPKG

6.54 kBJavaScriptView Raw
1/**
2 * Module : kero DataTable data
3 * Author : liuyk(liuyk@yonyou.com)
4 * Date : 2016-07-30 14:34:01
5 */
6
7/**
8 * 设置数据信息
9 * @memberof DataTable
10 * @param {object} data 需要设置的数据信息,必须包含rows或者pages属性
11 * @param {array} [data.rows] 数据信息中的行信息数组
12 * @param {array} [data.pages] 数据信息中的page对象数组
13 * @param {number} [data.pageIndex=DataTable对象当前的页码] 数据信息中的当前页码
14 * @param {number} [data.pageSize=DataTable对象当前的每页显示条数] 数据信息中的每页显示条数
15 * @param {number} [data.totalPages=DataTable对象当前的总页数] 数据信息中的总页数
16 * @param {number} [data.totalRow=如果存在rows则为rows的长度,否则为DataTable对象当前的总条数] 数据信息中的总条数
17 * @param {number} [data.select] 数据信息中的选中行行号
18 * @param {number} [data.focus] 数据信息中的focus行行号
19 * @param {object} options 设置数据时的配置参数
20 * @param {boolean} options.unSelect=false 是否默认选中第一行,如果为true则不选中第一行,否则选中第一行
21 * @example
22 * // 不包含分页的情况
23 * var data = {
24 * pageIndex:0,
25 * pageSize:5,
26 * totalPages:5,
27 * totalRow:22,
28 * rows:[{
29 * id:'r41201', // 如果需要添加
30 * status:'nrm', // 如果需要添加
31 * data:{
32 * field1:'value1',
33 * field2:'value2'
34 * }
35 * },{
36 * id:'r41202',
37 * status:'nrm',
38 * data:{
39 * field1:'value11',
40 * field2:'value21'
41 * }
42 * },...],
43 * select:[0]
44 * }
45 * // 包含分页的情况
46 * var data = {
47 * pageIndex:0,
48 * pageSize:5,
49 * totalPages:5,
50 * totalRow:22,
51 * pages:[{
52 * index: 0,
53 * select: [],
54 * current: -1,
55 * rows:[{
56 * id:'r41201', // 如果需要添加
57 * status:'nrm', // 如果需要添加
58 * data:{
59 * field1:'value1',
60 * field2:'value2'
61 * }
62 * },{
63 * id:'r41202',
64 * status:'nrm',
65 * data:{
66 * field1:'value11',
67 * field2:'value21'
68 * }
69 * },...]
70 * },...],
71 * }
72 * var op = {
73 * unSelect:true
74 * }
75 * datatable.setData(data,op)
76 */
77var setData = function setData(data, options) {
78 if (data.pageIndex || data.pageIndex === 0) {
79 var newIndex = data.pageIndex;
80 } else {
81 var newIndex = this.pageIndex();
82 }
83 if (data.pageSize || data.pageSize === 0) {
84 var newSize = data.pageSize;
85 } else {
86 var newSize = this.pageSize();
87 }
88 if (data.totalPages || data.totalPages === 0) {
89 var newTotalPages = data.totalPages;
90 } else {
91 var newTotalPages = this.totalPages();
92 }
93 if (data.totalRow || data.totalRow === 0) {
94 var newTotalRow = data.totalRow;
95 } else {
96 if (data.rows) var newTotalRow = data.rows.length;else var newTotalRow = this.totalRow();
97 }
98 var select,
99 focus,
100 unSelect = options ? options.unSelect : false;
101
102 this.pageIndex(newIndex);
103 this.pageSize(newSize);
104
105 this.pageCache = data.pageCache || this.pageCache;
106 if (this.pageCache === true) {
107 this.updatePages(data.pages);
108 if (newIndex != this.pageIndex()) {
109 this.setCurrentPage(newIndex, true);
110 this.totalPages(newTotalPages);
111 this.totalRow(newTotalRow + this.newCount);
112 return;
113 } else {
114 // 首先删除数据,然后将当前页数据插入
115 this.removeAllRows();
116 select = this.getPage(newIndex).selectedIndices;
117 focus = this.getPage(newIndex).focus;
118 var rows = this.setRows(this.getPage(newIndex).rows, options);
119 this.getPage(newIndex).rows = rows;
120 }
121 // 后台传入totalPages及totalRow才进行更新
122 if (data.totalPages) {
123 this.totalPages(data.totalPages);
124 }
125 if (data.totalRow || data.totalRow === 0) {
126 this.totalRow(data.totalRow + this.newCount);
127 }
128 } else {
129 select = data.select || (!unSelect ? [0] : []);
130 focus = data.focus !== undefined ? data.focus : data.current;
131 this.setRows(data.rows, options);
132 this.totalPages(newTotalPages);
133 this.totalRow(newTotalRow);
134 }
135
136 this.updateSelectedIndices();
137
138 if (select && select.length > 0 && this.rows().length > 0) this.setRowsSelect(select);
139 if (focus !== undefined && this.getRow(focus)) this.setRowFocus(focus);
140};
141
142/**
143 * 设置对应行对应字段的值
144 * @memberof DataTable
145 * @param {string} fieldName 需要设置的字段
146 * @param {string} value 需要设置的值
147 * @param {u.row} [row=当前行] 需要设置的u.row对象,
148 * @param {*} [ctx] 自定义属性,在valuechange监听传入对象中可通过ctx获取此处设置
149 * @example
150 * datatable.setValue('filed1','value1') //设置当前行字段值
151 * var row = datatable.getRow(1)
152 * datatable.setValue('filed1','value1',row) //设置在指定行字段值
153 * datatable.setValue('filed1','value1',row,'ctx') //设置在指定行字段值,同时传入自定义数据
154 */
155var setValue = function setValue(fieldName, value, row, ctx) {
156 if (arguments.length === 1) {
157 value = fieldName;
158 fieldName = '$data';
159 }
160
161 row = row ? row : this.getCurrentRow();
162 if (row) row.setValue(fieldName, value, ctx);
163};
164
165/**
166 * 重置所有行的数据至nrm状态时的数据
167 */
168var resetAllValue = function resetAllValue() {
169 var rows = new Array();
170 rows = rows.concat(this.rows());
171 for (var i = 0; i < rows.length; i++) {
172 var row = rows[i];
173 this.resetValueByRow(row);
174 }
175};
176
177/**
178 * 根据row对象重置数据至nrm状态时的数据
179 * @param {u.row} row 需要重置数据的row对象
180 */
181var resetValueByRow = function resetValueByRow(row) {
182 if (row.status == Row.STATUS.NEW) {
183 this.setRowsDelete(row);
184 } else if (row.status == Row.STATUS.FALSE_DELETE) {
185 row.status = Row.STATUS.NORMAL;
186 var rows = [row];
187 this.trigger(DataTable.ON_INSERT, {
188 index: 0,
189 rows: rows
190 });
191 } else if (row.status == Row.STATUS.UPDATE) {
192 row.status = Row.STATUS.NORMAL;
193 row.resetValue();
194 }
195};
196export var dataFunObj = {
197 setData: setData,
198 setValue: setValue,
199 resetAllValue: resetAllValue,
200 resetValueByRow: resetValueByRow
201};
\No newline at end of file