# qmik **Repository Path**: softtomorrow/qmik ## Basic Information - **Project Name**: qmik - **Description**: js framework - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-24 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 关于Qmik [下载压缩](https://raw.githubusercontent.com/leochen36/qmik/master/builds/Qmik.all.2.1.10.js) ## [官网](http://www.qmik.org) [微博](http://weibo.com/u/5262932432) Qmik是一个面向数据接口编程,代码模块化,mvc式的开发框架,数据双向趋动,入门简单,jquery语法,快速和精简,功能强大的无线端JavaScript库,核心库大小22kb,gzip=8kb, 是在无线端替换jquery,zepto,seajs,angulars,task任务处理,mvc等的理想框架, [模块开发内核](https://github.com/leochen36/qmik/wiki/sun-%E6%A8%A1%E5%9D%97%E5%BC%90%E5%8F%91) (支持模块压缩代码) [mvc开发模式,节约50%开发成本,减少50%维护成本,业务代码与页面dom结构80%解偶,面向数据接口编程](https://github.com/leochen36/qmik/wiki/mvc%E5%BC%80%E5%8F%91) [插件开发内核](https://github.com/leochen36/qmik/wiki/%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91) (推荐使用模块开发模式,不推荐使用插件模式,插件模式会破坏框架的代码结构) 简化了dom查询,事件,ajax通讯等的使用, 任务队列处理内核( [$.series](https://github.com/leochen36/qmik/wiki/$.series-%E4%B8%B2%E8%A1%8C%E4%BB%BB%E5%8A%A1%E5%A4%84%E7%90%86), [$.parallel](https://github.com/leochen36/qmik/wiki/$.parallel-%E5%B9%B6%E8%A1%8C%E4%BB%BB%E5%8A%A1%E5%A4%84%E7%90%86)) 支持uc,ie>=9,基于webkit内核的浏览器(如chrom,safari等),firefox; 推荐做移动web开发,也可以做pc端的开发, 您可以利用这一份框架Qmik来替换掉seajs,jquery,asnyc和模块引擎,,,可以减少框架的维护成本及页面请求大小和数量,提升性能 ## 应用场景 微信第三方插件应用及webapp,hybrid app 天猫双11(亿级pv) 天猫无线一系列大促活动(亿级pv,千万uv,投放入口有淘宝客户端,天猫客户端,无线浏览器等) 天猫ipad客户端h5页面等 天猫无线喵一眼,头条等频道及无线模板 深圳宜搜科技及其它公司的使用 ## 版本记录 [增加2.1.10版本:](https://github.com/leochen36/qmik/tree/master/builds) 2.1.10 版本, 1.修复全局控制器的引用变量,更新数据时,不能更新到其它控制器上的bug [增加2.1.02版本:](https://github.com/leochen36/qmik/tree/master/builds) 2.1.02 版本, 1.优化性能 2.修复q-for更新页面内容会闪的体验性问题 3.调整$.url的实现,跟正常的url访问具体相同的能力 [增加2.1.00版本(增强mvc功能,修复bug):](https://github.com/leochen36/qmik/tree/master/builds) 2.1.00 版本, 1.增加mvc功能,允许q-ctrl下包含子q-ctrl,但是没有父子关系,所有的q-ctrl只有一个共同的父控制器 2.修复sun模块没有执行预加载的bug [增加2.0.00版本(重大功能mvc完善):](https://github.com/leochen36/qmik/tree/master/builds) 2.0.00 版本, 1.增强完善mvc大模块功能 4.增加Qmik.fn.inViewport()方法(节点是否在当前视口) [增加1.4.00版本(稳定后,升级为2.0版本,重大功能mvc加入):](https://github.com/leochen36/qmik/tree/master/builds) 1.4.00 版本, 1.增加mvc大模块功能 2.修改sun模块define模块时,参数(require, exports, module)必须全传的bug 3.小细节优化 4.去掉render [增加1.3.80版本:](https://github.com/leochen36/qmik/tree/master/builds) 1.3.80 版本, 1.修复$.merge 对数组合拼操作的bug [增加1.3.70版本:](https://github.com/leochen36/qmik/tree/master/builds) 1.3.70 版本, 1.优化sun模块的异常调试日志, 2.重构事件模块 [增加1.3.62版本:](https://github.com/leochen36/qmik/tree/master/builds) 1.3.62 版本, 1.增强cycle的功能,增加循环结束时间的支持: $.cycle(function(){}, cycleTime, ttl); 2.修复 jsonp 对一小部分传递对象的参数的拼接url连接参数的bug,$.ajax({url:"https://github.com/leochen36/qmik",data:{name:'leo',haha:20}}) 这种 2.修复 append 对象不是节点型字符串的支持(非
xxx
这种) [增加1.3.60版本:](https://github.com/leochen36/qmik/tree/master/builds) 1.3.60 版本,对1.3.50版本修改sun模块造成的严重bug进行修复(请直接跳过1.3.50版本), 调整ready方法,ready里的方法,导出参数Qmik本身 Qmik.ready(function($){}), 修复对ie9的log方法不支持情况 增加1.3.50版本: 修复sun模块加载远程模块代码可能出现的异常 添加fn.appendTo,fn.afterTo,fn.beforeTo; 1.增加模块加载定义时对return的支持:如: ``` $.define("demo",function(require, exports, module){ module.exports = {name:"exports"}; return {name:"leo"};//等于 module.exports = {name:"leo"} }); ``` 增加1.3.10版本,,,此版本对sun模块的加载机制进行了调整,影响:新版本如果页面代码里已定义模块名:如 lib/qmik/Store, 在新版本中,如果定义了别名 $.sun.config({ alias: { "lib/qmik/Store":"http://xxx.com/xxx/store.js" } }); 那么新版本开始会认为 别名 "lib/qmik/Store" 就是模块名,会优先以模块名进行加载模块,如果加载不到,再去请求对应的js文件, 老版本认为是不一样,在实际使用中及反馈中,应该把二者统一为一样 增加1.3.01大版本, 任务进度处理模块$.task,有$.series(串行执行), $.parallel(并行执行), 方法执行,不抛出异常:$.execCatch(fun,args,error); 废弃不推荐的方法$.fn.animate,$.fn.hover; 增加1.2.36版本,可调试性 增加1.2.35版本,增强sun模块可调试性 增加1.2.33版本,增强稳定性,兼容性 增加1.2.32版本:增强sun模块的稳定性,防止多重依赖时,一个模块异常,造成其它模块不能正常加载 增加1.2.31版本:1优化了模块加载异常的日志信息打印,对节点的after,before调整为直接对本节点操作,不clone节点 增加1.2.30版本:1.优化sun模板,修复并优化getScript的回调策略 增加1.2.23版本:1.增加高清屏的判断 Qmik.isRetinal, 2.修复部分文本添加会造成的bug 增加1.2.22版本, 1.优化并解决查询(closest)的bug 增加1.2.20版本, 1.优化了查询,大幅提升了查询的性能, 2.减小了核心版本的体积,合并后减小到20.7k了,gzip在8k左右. 3.增强了了fn.live委托事件的功能,ie测试最低从ie9开始 4.增加了一个滚动插件Qmik.fn.scrollBar.js 5.增加了一个前进后退插件Qmik.nav.js,Qmik.nav插件依赖核心sun功能 1.2.16版本 修复: 1.sun模块对部分浏览器加载的bug 2.getJSON 少传data参数造成的bug ## API简介: encode(value) :等同于encodeURIComponent decode(value) :decodeURIComponent , isBool(value) : 布尔判断, isString(value) : 字符串判断, isFun(value) : 方法判断, isFunction(value) : 方法判断, isNum(value) :整形判断 , isNumber(value) : 整形判断, isArray(value) : 数组判断, isNull(value) : 空指针判断, isRetinal() : 判断是否是高清屏,默认是高清屏 likeArray(value) : 像数组,有length字段等一些属性, each(value,function(i,val){}) : 循环, stringify(value) : json转字符串, parseJSON(value) : 字符串转json, likeArray(value) : 像数组 isDate(value) :是否是时间类型 isObject(value) : 是否是对象 isPlainObject(value) : likeNull(value) : 像空值,如 "","null","undefined",null等会被认为True, inherit(subClass, superClass) : 继承类 子类subClass继承父类superClass的属性方法, 注:子类有父类的属性及方法时,不会被父类替换, trim(value) : 过滤前后不可见字符, toLower(value) :字符串小写, toUpper(value) : 大写, merge(map1,map2) : merge, // 合并对象 var m1={name:'leo'}, m2={age:11}, m= $.merge(m1, m2); //>>>result: {name:'leo', age:11} inArray(value, array) : 在数组里的索引位,var array=[1,2,3,4], idx = $.inArray(3,array);console.log(idx);//result:2 unique(array) : 数组去重,//var array=[1,2,3,4,5,4,3,6];array = $.unique(array);//result:[1, 2, 3, 4, 5, 6] map(array, callback) : //对数组里的内容,全部做一次数据映射转换, getScript(url, success, error) : 取得脚本 getCss(url, success, error) : 取得css grep(array[,callback]):过滤// var array=[1,2,null,3,6,5];var narray = $.grep(array, function(i, val){return val && val%2==0});console.log(narray);//result:[2, 6] param(array) : 抽取数组里面每个元素的name和value属性,转换成一个url形式(a=b&name=g)的字符串,有做encode,//[{name:'',value:''},{name:'',value:''}] now([datetime]) : 当前时间 delay(fun, time [arg1, arg2, arg3,...]) (https://github.com/leochen36/qmik/wiki/$.delay) \
<div q-ctrl="demoCtrl" class="box" >
<p> 全局: ${gname} </p>
倒计时: <input name="time" type="text"/> ${time} 或 {{time}}
<div>
<h3>用户信息 //qmik会自动把user.* 转换成 scope.user ={name:"",nick:"" ...} </h3>
<p>user.name <input name="user.name" type="text"/> ${user.name}</p>
<p>user.nick <input name="user.nick" type="text"/> ${user.nick}</p>
<p>user.email <input name="user.email" type="text"/> ${user.email}</p>
<p>user.qq <input name="user.qq" type="text"/> ${user.qq}</p>
<h3>//显示列表,ul下面的内容是模板,qmik会根据模板来生成相应的页面</h3>
<h3>
//q-onclick:是定义的单击事件,可以通过q-onxxx来定义事件,如:q-onclick,q-ontouchmove等
</h3>
<ul q-for="item in list" q-onclick="clickList" class="box">
<li>${item.title}</li>
</ul>
</div>
</div>
<script>
$.app(function(scope){//全局控制器的写法
scope.gname="lllleeeeoooo";
}).ctrl({
demoCtrl: function(scope){//定义控制器 scope:会话,作用空间在q-ctrl里面,不能超出
scope.once({//只触发一次,采用 $.fn.once 方法实现
viewport: function(){//当控制器所在的位置进入可显示的视口位置时,触发这个方法
///$.ajax({});
scope.user.name="leo";
scope.user.nick="leo";
scope.user.email="cwq0312@163.om";
scope.user.qq="555";
scope.apply("user");
}
});
scope.watch({//监听器
//监听name值的变化,发现变化,会触发此事件(通过change事件来触发)
//因此如果想要手动触发这个方法,需要通过scope.apply(["user.name"]);来触发事件
"user.name": function(map){
$.log("watch:", map);
},
"user": function(map){//监听所有user(.*)?的变化
}
});
scope.list= [{
title:'leo1'
},{
title:'leo2'
}];
scope.clickList = function(e){
var i = parseInt(Math.random() * 2);
var color = i%2==1 ? "red": "green";
$(e.target).css("backgroundColor",color);
}
scope.time = 999;
$.cycle(function(){
scope.time--;
scope.apply(["time"]);//更新到界面
}, 1000);
}
});
</script>
</div>
## 按需加载例子:
$.sun.use(["module1","module2"],function(module1,module2){}); $.sun.define(function(require, exports, module){}); $.sun.config();
a. Config.js 文件,写如下内容:
(function($) {
$.config({
context : "/",// 配置工程的访问路径,如果没有配置,默认= /
debug:true//debug模式
});
// 定义模块名及请求路径
$.sun.config({
//别名系统,把路径抽象成一个key来表示,后续通过这个key来找到对应的url
alias : {
// qmik组件
"Qmik.nav" : $.url("/assets/plugins/Qmik.nav.js"),//
///
//业务模块
"Home" : "module/home/Home.js",
},
preload : [//预加载,在加载其它模块前,最优先加载下面定义的模块
"Qmik.nav"
]
});
})(Qmik);
b.在index.html页面引入js