UNPKG

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