UNPKG

yylib-quick-mobile

Version:

yylib-quick-mobile

125 lines (120 loc) 5.49 kB
'use strict'; var loader = require('./loader'); var _ = require('lodash'); var mathUtil = require('./MathUtils'); var formatUtils = require('./formatUtils'); var JsPluginUtils = { /** * 初始化原有事件信息 * options{ * page:被扩展的页面 * uiEvent:被扩展的原始事件数据 * } */ 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); //合并 }); } } }, /** * 合并文件 * options{ * page:被扩展的页面 * uiEvent:被扩展的原始事件数据 * } */ 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) { //注意此次需要克隆,以防止引用共享 //扩展事件规则 事件发生前 前加 before_ 事件发生后 after_ 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;