yylib-quick-mobile
Version:
yylib-quick-mobile
108 lines (102 loc) • 4.65 kB
JavaScript
var loader = require('./loader');
var _ = require('lodash');
var mathUtil = require('./MathUtils');
var formatUtils = require('./formatUtils');
var JsPluginUtils = {
init: function init(options) {
var _ref = options || {},
page = _ref.page,
uiEvent = _ref.uiEvent;
if (!page) return;
var loadPath = page.getJsPluginUrl();
var pageCode = page.getPageCode();
if (loadPath && pageCode && uiEvent) {
if (window["YYPlugin_" + pageCode]) {
JsPluginUtils.merge(options);
} else {
loader.loadJS(loadPath, function () {
JsPluginUtils.merge(options);
});
}
}
},
merge: function merge(options) {
var transUtils = { _: _, ajax: window.YYUtils.Ajax, authToken: window.YYUtils.AuthToken, mathUtil: mathUtil, formatUtils: formatUtils };
var _ref2 = options || {},
page = _ref2.page,
uiEvent = _ref2.uiEvent;
if (!page) return;
var loadPath = page.getJsPluginUrl();
var pageCode = page.getPageCode();
if (loadPath && pageCode && uiEvent) {
if (window["YYPlugin_" + pageCode]) {
var pluginEvents = this.dealPluginEvent(page, window["YYPlugin_" + pageCode](transUtils));
var allEvent = this.combineEvent(pluginEvents, uiEvent);
var returnEvent = this.transEvent(allEvent, page, pluginEvents);
page.refresh(null, { uiEvent: returnEvent });
} else {
console.error("请按规范命名当前页面扩展插件的方法名,缺少方法:YYPlugin_" + pageCode);
}
}
},
dealPluginEvent: function dealPluginEvent(page, copyEvents) {
for (var uikey in copyEvents) {
var itemEvents = copyEvents[uikey];
for (var name in itemEvents) {
if (itemEvents[name] && typeof itemEvents[name] == 'function') {
itemEvents[name] = itemEvents[name].bind(page);
} else {
console.error('[绑定事件失败]' + uikey + '.' + name + ',检查是否为有效的Function', err);
}
}
}
return copyEvents;
},
combineEvent: function combineEvent(pluginEvents, _uiEvent) {
for (var item in _uiEvent) {
if (pluginEvents[item]) {
_.assign(_uiEvent[item], pluginEvents[item]);
}
}
for (var item in pluginEvents) {
if (!_uiEvent[item]) {
_uiEvent[item] = pluginEvents[item];
}
}
return _uiEvent;
},
transEvent: function transEvent(uiEvent, page, pluginEvents) {
var _uiEvent = _.cloneDeep(uiEvent);
for (var uikey in _uiEvent) {
for (var eventName in _uiEvent[uikey]) {
if (eventName.indexOf('before_') == -1 && eventName.indexOf('after_') == -1 && pluginEvents[uikey] && (typeof pluginEvents[uikey][eventName] == "function" || typeof pluginEvents[uikey]["before_" + eventName] == "function" || typeof pluginEvents[uikey]["after_" + eventName] == "function")) {
(function (key, name) {
var originFunc = _uiEvent[key][name];
_uiEvent[key][name] = function () {
var originFuncParams = arguments;
var mainSet = new Promise(function (resolve, reject) {
console.log("执行" + key + "组件事件:" + name);
resolve("success");
}).then(function () {
if (_uiEvent[key]["before_" + name]) {
return _uiEvent[key]["before_" + name].apply(page, originFuncParams);
}
}).then(function () {
return originFunc.apply(page, originFuncParams);
}).then(function () {
if (_uiEvent[key]["after_" + name]) {
_uiEvent[key]["after_" + name].apply(page, originFuncParams);
}
}).catch(function (msg) {
console.log(msg);
});
};
})(uikey, eventName);
}
}
}
return _uiEvent;
}
};
module.exports = JsPluginUtils;
;