【MUI晋级】开发MUI自定义表单插件一,基础插件模板搭建(持续更新)

【MUI晋级】开发MUI自定义表单插件一,基础插件模板搭建
【MUI晋级】开发MUI自定义表单插件二,插件封装
本教程不适合MUI新手,针对的是对MUI框架和原生JS有一定了解,但对代码风格的统一和插件的封装迷惑的同学!

本文使用的编辑器是:HBuilder,本人英语不是太好,命名奇葩请见谅

第一步:新建一个移动APP - MUI项目

怎么新建的就不用说了吧,记得选择mui项目

新建项目

第二步:新建css/resetMUI.css和js/customForm.js文件

resetMUI.css 重置mui样式文件
customForm.js 核心js代码文件

新建完之后记得在index.html引用

修改HTML

第三步:创建示例表单

这一步在正式使用环境下是完全没必要的,但是为了演示如何重置mui的默认样式,这是必要的!

  • body中创建header部分 按** mh **可以快速激活header提示,但是没有右侧的按钮
<header class="mui-bar mui-bar-nav">
    <button class="mui-action-back mui-btn mui-btn-blue mui-btn-link mui-btn-nav mui-pull-left"><span class="mui-icon mui-icon-left-nav"></span>返回</button>
    <h1 class="mui-title">新增客户</h1>
    <span class="mui-pull-right">保存</span>
</header>
  • header下面创建content部分 按** mf **可以激活表单提示
<div class="mui-content">
    <form class="mui-input-group">
        <div class="mui-input-row">
            <label>客户代码</label>
            <input type="text" class="mui-input-clear" placeholder="请输入客户代码">
        </div>
        <div class="mui-input-row">
            <label>客户名称</label>
            <input type="text" class="mui-input-clear" placeholder="请输入客户名称">
        </div>
        <div class="mui-input-row">
            <label>联系人姓名</label>
            <input type="text" class="mui-input-clear" placeholder="请输入联系人姓名">
        </div>
        <div class="mui-input-row">
            <label>联系人电话</label>
            <input type="number" class="mui-input-clear" placeholder="请输入联系人电话">
        </div>
        <div class="mui-input-row">
            <label>客户地址</label>
            <input type="text" class="mui-input-clear" readonly placeholder="点击选择客户地址">
        </div>
        <div class="mui-input-row">
            <label>客户级别</label>
            <select name="">
                <option value="1">A级</option>
                <option value="2">B级</option>
                <option value="3">C级</option>
            </select>
        </div>
        <div class="mui-input-row">
            <label>备注</label>
            <textarea name=""  placeholder="请输入备注信息"></textarea>
        </div>
    </form>
</div>

下面是在边改边看模式下的截图

效果截图

第四步:重置MUI样式

  • 重置header样式
    先给header添加一个类名 mui-newBar
    <header class="mui-bar mui-bar-nav mui-newBar">
    然后在 resetMUI.css 中添加如下代码
/*重新设置字体*/
body{font-family:Helvetica Neue,Roboto,microsoft yahei,Arial !important;}
input,textarea,select{ font-family:Helvetica Neue,Roboto,microsoft yahei,Arial !important;}
/*重置header样式*/
.mui-newBar{background-color: #00C3F2;box-shadow: none;}
.mui-newBar .mui-btn-link{color:#fff;}
.mui-newBar .mui-title{color:#fff; font-size: 18px;left: 60px;right: 60px;}
.mui-newBar .mui-pull-right{line-height: 44px;color:#fff;}

效果为

header
  • 重置表单样式
/*重置表单样式*/
.mui-input-group:before{background: none;}
.mui-input-group:after{background: none;}
.mui-input-group .mui-input-row{height: auto;}
.mui-input-row label{line-height: 46px;padding: 0;text-align: left;width: 30%;padding-left: 10px;color:#1E1E1E;font-size: 15px !important;}
.mui-input-group .mui-input-row:after{background-color: #eee;}
.mui-input-row label~input, .mui-input-row label~select, .mui-input-row label~textarea{width: 70%;min-height: 46px;text-align: right; font-size: 15px;border-radius: 0;}
.mui-input-row .mui-input-clear~.mui-icon-clear, .mui-input-row .mui-input-password~.mui-icon-eye, .mui-input-row .mui-input-speech~.mui-icon-speech{left:35%;top: 50%;width: 20px;height: 20px;margin-top:-10px;}
.mui-input-row select{font-size: 14px;width: auto !important;padding-right: 10px;}
.mui-input-row select option{text-align: right;}
.mui-input-row textarea{padding: 10px;height: 62px;}
.mui-input-row input[readonly],.mui-input-row input[disabled]{color:#666;background-color:rgb(240,240,240);background: -webkit-linear-gradient(left, #fff, rgb(240,240,240)) !important; }
.mui-input-row input:focus,.mui-input-row textarea:focus{background-color:rgb(245,253,254);background: -webkit-linear-gradient(left, #fff, rgb(245,253,254));}

效果为

重置样式后的样子
  1. -webkit-linear-gradient为设置渐变色的,不想要的可以去掉
  1. 清除按钮被移动到了这里,如果不想要可以在input节点里去掉mui-input-clear样式
    清除按钮
  2. select 如果在设置宽度的情况下 text-align 属性是无效的, width:auto 才能生效

第五步:JS部分

  • 在customForm.js里面添加如下代码
/* 自定义表单插件
 * ----------------------
 * 时间:2017年4月25日16:05:55
 * 人员:三言
 */
;(function($,win,dom,undefined){
    //默认参数
    var defaultConfig = {
        
    };
    
    //插件核心方法
    var CustomForm = {
        /** 实例化调用函数
         * -------------------------
         * @param {Object} arg 插件配置参数
         */
        init:function(arg){
            var self = this;
            
            if(arg) {
                
            } else {
                self._logError("初始化参数不存在");
            }
            
            return slef;
        },
        
        /** 内部方法,输出错误信息
         *  -----------------------------
         * @param {String} errorMsg 错误信息字符串
         * @param {Boolean} isTypeEr 是否类型错误
         */
        _logError: function(errorMsg, isTypeEr) {
            var self = this;
            if(self.config.Debug) {
                if(isTypeEr) {
                    throw new TypeError(errorMsg);
                } else {
                    throw new Error(errorMsg);
                }
            } else {
                return;
            }
            
            return self;
        }
    };
    
    //注册插件
    $.customForm = $.Class.extend(CustomForm);
})(mui,window,document);

上面的代码就是MUI插件的模板,以后写插件就可以在此基础上扩展,当然还有其他的插件模板,比如 mui("#test").testFn(); 这样插件的模板,以后会有相关的教程;

  1. ;(function($,win,dom,undefined){...})(mui,window,document);
    这段代码的意思是创建了一个匿名函数,并通过闭包调用,主要作用是创建独立的命名空间,不会污染到全局,后面括号内的值是对应到function的参数的,至于为什么多了一个undefined, 同学们可以自行百度。开头和结尾的 ; 是为了在合并和压缩的时候不会报错!
  1. 在文件的开头写上插件的作用和开发时间和人员是很重要的一部分,尤其在团队协作中
  2. 鼠标放到 function 上面然后按 ALT+SHIFT+J 可以快速生成注释,具体可以参阅 JSDoc+
  3. 如果没有特定的返回值,建议每个方法都返回对象自身,这样可以做到像jquery一样的 链式调用
  4. 内部方法要以 _ 开头
  5. $.customForm = $.Class.extend(CustomForm);
    这句话的意思给mui扩展方法并调用该对象的 init 函数

今天先写到这里,晚上或者明天会继续更新,把分享当成生活的一部分也是一种乐趣~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容