UNPKG

5.09 kBJavaScriptView Raw
1/**
2 * Module : kero dataTable mete
3 * Author : liuyk(liuyk@yonyou.com)
4 * Date : 2016-07-30 14:34:01
5 */
6
7
8/**
9 * 设置meta信息
10 * @memberof DataTable
11 * @param {string} fieldName 需要设置meta信息的字段名
12 * @param {string} key meta信息的key
13 * @param {string} value meta信息的值
14 * @example
15 * datatable.setMeta('filed1','type','string')
16 */
17const setMeta = function(fieldName, key, value) {
18 if (!this.meta[fieldName])
19 return;
20 var oldValue = this.meta[fieldName][key]
21 var currRow = this.getCurrentRow();
22 this.meta[fieldName][key] = value
23 if (this.metaChange[fieldName + '.' + key])
24 this.metaChange[fieldName + '.' + key](-this.metaChange[fieldName + '.' + key]());
25 if (key == 'enable')
26 this.enableChange(-this.enableChange())
27 this.trigger(DataTable.ON_META_CHANGE, {
28 eventType: 'dataTableEvent',
29 dataTable: this.id,
30 field: fieldName,
31 meta: key,
32 oldValue: oldValue,
33 newValue: value
34 });
35 if (currRow && !currRow.getMeta(fieldName, key, false)) {
36 this.trigger(fieldName + '.' + key + '.' + DataTable.ON_CURRENT_META_CHANGE, {
37 eventType: 'dataTableEvent',
38 dataTable: this.id,
39 oldValue: oldValue,
40 newValue: value
41 });
42 }
43}
44
45
46/**
47 * 更新meta信息
48 * @memberof DataTable
49 * @param {object} meta 需要更新的meta信息
50 * @example
51 * var metaObj = {supplier: {meta: {precision:'3', default: '0239900x', display:'显示名称'}}}
52 * datatable.updateMeta(metaObj)
53 */
54const updateMeta = function(meta) {
55 if (!meta) {
56 return;
57 }
58 for (var fieldKey in meta) {
59 for (var propKey in meta[fieldKey]) {
60 var oldValue = this.meta[fieldKey][propKey]
61 var newValue = meta[fieldKey][propKey]
62 if (propKey === 'default') {
63 if (!this.meta[fieldKey]['default']) {
64 this.meta[fieldKey]['default'] = {}
65 }
66 this.meta[fieldKey]['default'].value = meta[fieldKey][propKey]
67 } else if (propKey === 'display') {
68 if (!this.meta[fieldKey]['default']) {
69 this.meta[fieldKey]['default'] = {}
70 }
71 this.meta[fieldKey]['default'].display = meta[fieldKey][propKey]
72 } else {
73 this.meta[fieldKey][propKey] = meta[fieldKey][propKey]
74 }
75 if (this.metaChange[fieldKey + '.' + propKey])
76 this.metaChange[fieldKey + '.' + propKey](-this.metaChange[fieldKey + '.' + propKey]());
77
78 this.trigger(DataTable.ON_META_CHANGE, {
79 eventType: 'dataTableEvent',
80 dataTable: this.id,
81 field: fieldKey,
82 meta: propKey,
83 oldValue: oldValue,
84 newValue: newValue
85 });
86 }
87
88 }
89}
90
91
92
93
94// 字段不存在时创建字段,fieldName为需要创建的字段
95// options.meta为对应的meta信息
96const createField = function(fieldName, options) {
97 //字段不主动定义,则不创建
98 if (this.root.strict == true)
99 return;
100 //有子表的情况不创建字段
101 if (fieldName.indexOf('.') != -1) {
102 var fNames = fieldName.split('.');
103 var _name = fNames[0];
104 for (var i = 0, count = fNames.length; i < count; i++) {
105 if (this.meta[_name] && this.meta[_name]['type'] === 'child')
106 return;
107 if ((i + 1) < count)
108 _name = _name + '.' + fNames[i + 1]
109 }
110 }
111 if (!this.meta[fieldName]) {
112 this.meta[fieldName] = {}
113 }
114 if (typeof options === 'object') {
115 if (options['meta']) {
116 for (var key in options['meta']) {
117 //if (!this.meta[fieldName][key]){
118 this.meta[fieldName]['meta'][key] = options['meta'][key];
119 //}
120 }
121 } else {
122 for (var key in options) {
123 //if (!this.meta[fieldName][key]){
124 this.meta[fieldName][key] = options[key];
125 //}
126 }
127 }
128 }
129 // 在顶层dataTable上定义field信息
130 if (this.root !== this) {
131 var nsArr = this.ns.split('.')
132 var _fieldMeta = this.root.meta
133 for (var i = 0; i < nsArr.length; i++) {
134 _fieldMeta[nsArr[i]] = _fieldMeta[nsArr[i]] || {}
135 _fieldMeta[nsArr[i]]['type'] = _fieldMeta[nsArr[i]]['type'] || 'child';
136 _fieldMeta[nsArr[i]]['meta'] = _fieldMeta[nsArr[i]]['meta'] || {};
137 _fieldMeta = _fieldMeta[nsArr[i]]['meta'];
138 }
139 if (!_fieldMeta[fieldName]) {
140 _fieldMeta[fieldName] = {}
141 }
142 if (typeof options === 'object') {
143 for (var key in options) {
144 if (!_fieldMeta[fieldName][key]) {
145 _fieldMeta[fieldName][key] = options[key];
146 }
147 }
148 }
149 }
150
151}
152
153export const metaFunObj = {
154 setMeta: setMeta,
155 updateMeta: updateMeta,
156 createField: createField
157}