/*! * MODULE_DEMO_NAME 模块组件通用结构 * MIT Licensed */ layui.define([''], function(exports){ "use strict"; var $ = layui.$ //模块名 ,MOD_NAME = 'MODULE_DEMO_NAME' ,MOD_INDEX = 'layui_'+ MOD_NAME +'_index' //模块索引名 //外部接口 ,MODULE_DEMO_NAME = { config: {} ,index: layui[MOD_NAME] ? (layui[MOD_NAME].index + 10000) : 0 //设置全局项 ,set: function(options){ var that = this; that.config = $.extend({}, that.config, options); return that; } //事件 ,on: function(events, callback){ return layui.onevent.call(this, MOD_NAME, events, callback); } } //操作当前实例 ,thisModule = function(){ var that = this ,options = that.config ,id = options.id || that.index; thisModule.that[id] = that; //记录当前实例对象 return { config: options //重置实例 ,reload: function(options){ that.reload.call(that, options); } } } //字符常量 ,STR_ELEM = 'layui-MODULE_DEMO_NAME', STR_HIDE = 'layui-hide', STR_DISABLED = 'layui-disabled', STR_NONE = 'layui-none' //主模板 ,TPL_MAIN = [''].join('') //构造器 ,Class = function(options){ var that = this; that.index = ++MODULE_DEMO_NAME.index; that.config = $.extend({}, that.config, MODULE_DEMO_NAME.config, options); that.render(); }; //默认配置 Class.prototype.config = { }; //重载实例 Class.prototype.reload = function(options){ var that = this; //防止数组深度合并 layui.each(options, function(key, item){ if(layui._typeof(item) === 'array') delete that.config[key]; }); that.config = $.extend(true, {}, that.config, options); that.render(); }; //渲染 Class.prototype.render = function(){ var that = this ,options = that.config; //解析模板 var thisElem = that.elem = $(laytpl(TPL_MAIN).render({ data: options ,index: that.index //索引 })); var othis = options.elem = $(options.elem); if(!othis[0]) return; that.events(); //事件 }; //事件 Class.prototype.events = function(){ var that = this ,options = that.config; }; //记录所有实例 thisModule.that = {}; //记录所有实例对象 //获取当前实例对象 thisModule.getThis = function(id){ var that = thisModule.that[id]; if(!that) hint.error(id ? (MOD_NAME +' instance with ID \''+ id +'\' not found') : 'ID argument required'); return that }; //重载实例 MODULE_DEMO_NAME.reload = function(id, options){ var that = thisModule.that[id]; that.reload(options); return thisModule.call(that); }; //核心入口 MODULE_DEMO_NAME.render = function(options){ var inst = new Class(options); return thisModule.call(inst); }; exports(MOD_NAME, MODULE_DEMO_NAME); });