kero
Version:
<img src="http://tinper.org/assets/images/kero.png" width="120" style="max-width:100%;"/>
143 lines (138 loc) • 5.18 kB
JavaScript
/**
* Module : kero dataTable mete
* Author : liuyk(liuyk@yonyou.com)
* Date : 2016-07-30 14:34:01
*/
/**
* 设置meta信息
* @memberof DataTable
* @param {string} fieldName 需要设置meta信息的字段名
* @param {string} key meta信息的key
* @param {string} value meta信息的值
* @example
* datatable.setMeta('filed1','type','string')
*/
var setMeta = function setMeta(fieldName, key, value) {
if (!this.meta[fieldName]) return;
var oldValue = this.meta[fieldName][key];
var currRow = this.getCurrentRow();
this.meta[fieldName][key] = value;
if (this.metaChange[fieldName + '.' + key]) this.metaChange[fieldName + '.' + key](-this.metaChange[fieldName + '.' + key]());
if (key == 'enable') this.enableChange(-this.enableChange());
this.trigger(DataTable.ON_META_CHANGE, {
eventType: 'dataTableEvent',
dataTable: this.id,
field: fieldName,
meta: key,
oldValue: oldValue,
newValue: value
});
if (currRow && !currRow.getMeta(fieldName, key, false)) {
this.trigger(fieldName + '.' + key + '.' + DataTable.ON_CURRENT_META_CHANGE, {
eventType: 'dataTableEvent',
dataTable: this.id,
oldValue: oldValue,
newValue: value
});
}
};
/**
* 更新meta信息
* @memberof DataTable
* @param {object} meta 需要更新的meta信息
* @example
* var metaObj = {supplier: {meta: {precision:'3', default: '0239900x', display:'显示名称'}}}
* datatable.updateMeta(metaObj)
*/
var updateMeta = function updateMeta(meta) {
if (!meta) {
return;
}
for (var fieldKey in meta) {
for (var propKey in meta[fieldKey]) {
var oldValue = this.meta[fieldKey][propKey];
var newValue = meta[fieldKey][propKey];
if (propKey === 'default') {
if (!this.meta[fieldKey]['default']) {
this.meta[fieldKey]['default'] = {};
}
this.meta[fieldKey]['default'].value = meta[fieldKey][propKey];
} else if (propKey === 'display') {
if (!this.meta[fieldKey]['default']) {
this.meta[fieldKey]['default'] = {};
}
this.meta[fieldKey]['default'].display = meta[fieldKey][propKey];
} else {
this.meta[fieldKey][propKey] = meta[fieldKey][propKey];
}
if (this.metaChange[fieldKey + '.' + propKey]) this.metaChange[fieldKey + '.' + propKey](-this.metaChange[fieldKey + '.' + propKey]());
this.trigger(DataTable.ON_META_CHANGE, {
eventType: 'dataTableEvent',
dataTable: this.id,
field: fieldKey,
meta: propKey,
oldValue: oldValue,
newValue: newValue
});
}
}
};
// 字段不存在时创建字段,fieldName为需要创建的字段
// options.meta为对应的meta信息
var createField = function createField(fieldName, options) {
//字段不主动定义,则不创建
if (this.root.strict == true) return;
//有子表的情况不创建字段
if (fieldName.indexOf('.') != -1) {
var fNames = fieldName.split('.');
var _name = fNames[0];
for (var i = 0, count = fNames.length; i < count; i++) {
if (this.meta[_name] && this.meta[_name]['type'] === 'child') return;
if (i + 1 < count) _name = _name + '.' + fNames[i + 1];
}
}
if (!this.meta[fieldName]) {
this.meta[fieldName] = {};
}
if ((typeof options === 'undefined' ? 'undefined' : babelHelpers['typeof'](options)) === 'object') {
if (options['meta']) {
for (var key in options['meta']) {
//if (!this.meta[fieldName][key]){
this.meta[fieldName]['meta'][key] = options['meta'][key];
//}
}
} else {
for (var key in options) {
//if (!this.meta[fieldName][key]){
this.meta[fieldName][key] = options[key];
//}
}
}
}
// 在顶层dataTable上定义field信息
if (this.root !== this) {
var nsArr = this.ns.split('.');
var _fieldMeta = this.root.meta;
for (var i = 0; i < nsArr.length; i++) {
_fieldMeta[nsArr[i]] = _fieldMeta[nsArr[i]] || {};
_fieldMeta[nsArr[i]]['type'] = _fieldMeta[nsArr[i]]['type'] || 'child';
_fieldMeta[nsArr[i]]['meta'] = _fieldMeta[nsArr[i]]['meta'] || {};
_fieldMeta = _fieldMeta[nsArr[i]]['meta'];
}
if (!_fieldMeta[fieldName]) {
_fieldMeta[fieldName] = {};
}
if ((typeof options === 'undefined' ? 'undefined' : babelHelpers['typeof'](options)) === 'object') {
for (var key in options) {
if (!_fieldMeta[fieldName][key]) {
_fieldMeta[fieldName][key] = options[key];
}
}
}
}
};
export var metaFunObj = {
setMeta: setMeta,
updateMeta: updateMeta,
createField: createField
};