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 | */
|
77 | var 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 | */
|
155 | var 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 | */
|
168 | var 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 | */
|
181 | var 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 | };
|
196 | export var dataFunObj = {
|
197 | setData: setData,
|
198 | setValue: setValue,
|
199 | resetAllValue: resetAllValue,
|
200 | resetValueByRow: resetValueByRow
|
201 | }; |
\ | No newline at end of file |