轻量jquery框架之--组件交互基础设计
概要
组件交互基础,即考虑在JQUERY对象下($)下扩展所有组件都需要用到的通用api,如ajax入口、对表单的操作、html片段加载、通用的配合datagrid通用的curd客户端对象等。
扩展api如下
一、ajax设计
(1)统一ajax请求的流程预计数据返回格式、ajax请求的数据返回格式如下:
{
code:0/1, //0 表示正确运行,并返回了信息、数据;1表示非正确返回结果(可能是程序异常或者运算结果异常),异常信息放到message属性中
message:"服务端提示的信息",
data:{} //数据,如果返回的结果需要带数据,则保持到data属性中,如tree,datagrid的请求返回的数据就放在该属性中
}
(2)将ajax的请求流程设计为try.. catch.. finally...模式,即无论是正确运行还是错误运行,都应该有一个finally执行,这样客户代码可以注册自己需要运行的函数
(3)ajax默认配置定义
var ajaxOpts = {
timeout: 1000 * 60,
type: "POST",
dataType: 'json',
async: true,
preRequest: function () {//请求前
},
/***
*ajax错误
***/
error: function (xhr, status, errorThrown) {
this.final(status);
},
/**
*请求成功,并返回结果
***/
success: function (res) {
this.final(res);
if (res.code === 0) {
//res.convert 指的是返回的data属性值是json数据,但是是字符串格式,需要转为json对象后才传给客户代码
if (typeof res.convert != 'undefined' && (res.convert || res.convert === 'true'))
res.data = eval("(" + res.data + ")");
this.ok(res.data);
} else {
this.fail(res.message);
}
},
/**
*当返回结果是正确时的处理
**/
ok: function (data) {
},
/***
*当返回结果是非正确时的处理
***/
fail: function (msg) {
alert(msg);
},
/**
* 无论如何都回调的函数
****/
final: function (res) {//无论成功,失败,错误都执行的回调
}
};
二、其他通用api设计
三、整体代码
/**
* @author huangjingwen
* 封装通用公用接口
* @version 1.0
*/
(function ($) {
var ajaxOpts = {
timeout: 1000 * 60,
type: "POST",
dataType: 'json',
async: true,
preRequest: function () {//请求前
},
/***
*ajax错误
***/
error: function (xhr, status, errorThrown) {
this.final(status);
},
/**
*请求成功,并返回结果
***/
success: function (res) {
this.final(res);
if (res.code === 0) {
//res.convert 指的是返回的data属性值是json数据,但是是字符串格式,需要转为json对象后才传给客户代码
if (typeof res.convert != 'undefined' && (res.convert || res.convert === 'true'))
res.data = eval("(" + res.data + ")");
this.ok(res.data);
} else {
this.fail(res.message);
}
},
/**
*当返回结果是正确时的处理
**/
ok: function (data) {
},
/***
*当返回结果是非正确时的处理
***/
fail: function (msg) {
alert(msg);
},
/**
* 无论如何都回调的函数
****/
final: function (res) {//无论成功,失败,错误都执行的回调
}
};
/**
*框架的ajax统一入口
*所有ajax返回均以 {code:'',message:'',data:{}}的格式返回
*code=0表示服务器无异常运行并返回结果,code=1时,表示服务器出现异常并返回提示
*message,用与服务器返回的信息提示
*data,用于服务器返回的数据,如tree组件、datagrid组件返回的数据就保存到data当中
****/
$.request = function () {
var args = arguments[0];
var opts;
if (args != undefined)
opts = $.extend({}, ajaxOpts, args);
else
opts = ajaxOpts;
opts.preRequest();
$.ajax(opts);
};
/***
* 某个html标签加载远程html文件
*options={ target:jquery目标对象,
* url:'远程地址',
* params:{},//参数
* load:function(){.........} , //加载前处理事件
* loaded:function(result){.........} //加载后处理事件
* }
***/
$.htmlLoad = function () {
var opts = arguments[0];
opts.target.html("<div class='loading'>正在加载......</div>");
if (typeof opts.load === 'function') {
opts.load.call(opts.target);
}
var url = opts.url;
opts.target.load(url, opts.prarms, function (xmlReq, statu, error) {
if (statu === 'error') {
opts.target.html(xmlReq);
} else {
if (typeof opts.loaded === 'function') {
opts.loaded.call(opts.target);
}
}
});
};
/**
*将form表单转为json对象
***/
$.parseForm = function () {
var opts = arguments[0];
};
/***
*将json对象填充到表单中
***/
$.fillForm = function () {
var opts = arguments[0];
};
/***
*重置表单
****/
$.resetForm = function () { };
/**
*信息弹唱框
***/
$.alert = function () {
};
/**
*打开一个窗口
***/
$.window = function () {
};
/***
*获取字符长度
**/
$.getCharWidth = function (text, fontSize) {
var span = document.getElementById("__getcharwidth");
if (span == null) {
span = document.createElement("span");
span.id = "__getcharwidth";
document.body.appendChild(span);
span.style.visibility = "hidden";
span.style.whiteSpace = "nowrap";
}
span.innerText = text;
span.style.fontSize = fontSize;
return span.offsetWidth;
};
/***
*扩展一个通用的curd对象,用于结合datagrid实现通用的curd操作api封装
***/
$.curd = function () { };
$.curd.prototype = {
};
})(jQuery);
代码下载:https://code.csdn.net/hjwen/open-ui/tree/master
轻量jquery框架之--组件交互基础设计的更多相关文章
- Vue.js:轻量高效的前端组件化方案
转发一篇尤老师对vue.js的介绍,了解vue.js的来龙去脉.不过现在已经是2.0了,也有添加一些新的东西,当然有些东西也改了. Vue.js:轻量高效的前端组件化方案 Vue.js 是我在2014 ...
- vue-calendar 基于 vue 2.0 开发的轻量,高性能日历组件
vue-calendar-component 基于 vue 2.0 开发的轻量,高性能日历组件 占用内存小,性能好,样式好看,可扩展性强 原生 js 开发,没引入第三方库 Why Github 上很多 ...
- vue-concise-slider 一个轻量的vue幻灯片组件
vue-concise-slider 一个轻量的vue幻灯片组件 阅读 541 收藏 35 2017-07-03 原文链接:github.com 外卖订单处理有烦恼?试试美团点评餐饮开放平台吧,可实现 ...
- Vue.js:轻量高效的前端组件化方案(转载)
摘要:Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.在前端纷繁复杂的生态中,Vue.js有幸受到一定程度的关注,目前在GitHub上已经有5000+的star.本文将从各方面对Vue ...
- 【转】Vue.js:轻量高效的前端组件化方案
摘要:Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.在前端纷繁复杂的生态中,Vue.js有幸受到一定程度的关注,目前在GitHub上已经有5000+的star.本文将从各方面对Vue ...
- Cardinal:一个用于移动项目开发的轻量 CSS 框架
Cardinal 是一个适用于移动项目的 CSS 框架,包含很多有用的默认样式.矢量字体.可重用的模块以及一个简单的响应式模块系统.Cardinal 提供了一种在多种移动设备上实现可伸缩的字体和布局的 ...
- Android轻量缓存框架--ASimpleCache
[转] 大神真面目 稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! ...
- [Go] 轻量服务器框架基础TCP服务模块
框架要先把整体的结构定义好,一般都是在$GOPATH目录的src下建立自己的目录 zinterface是一些接口的定义 znet就是接口的具体实现 IServer.go package zinterf ...
- [Go] 轻量服务器框架基础TCP连接的抽象和封装
对tcp连接部分以及与连接绑定的业务部分进行抽象和封装 主要是对连接的开启关闭和读写进行封装,抽象出接口,使用回调进行具体业务的绑定 zinterface/iconnection.go package ...
随机推荐
- mvc4 基于Area实现插件模块化开发
对于一个较大规模的Web应用,可以从功能上通过Area将其划分为为较小的单元.每个Area相当于一个独立的子系统,具有一套包含Model.Views和Controller在内 的目录结构和配置文件.一 ...
- Linux - How To Set Up an NFS Mount on CentOS 6
About NFS (Network File System) Mounts NFS mounts work to share a directory between several servers. ...
- 联通3g彩信设置
手机ME865,安卓2.3.6 添加接入点名称:3gwapAPN:3gwap代理:10.0.0.172端口:80服务器:http://www.wo.com.cnMMSC:http://mmsc.myu ...
- XJOI网上同步训练DAY1 T3
思路:一开始看到这题的时候想DP,可是发现貌似不行..因为有前缀也有后缀,而且有的后缀会覆盖到现在的前缀,这就不满足无后效性了啊! 但是有个很巧妙的思路:如果我们知道a[i]的最大值,那么p的数量和q ...
- Android 图片合成:添加蒙板效果 不规则相框 透明度渐变效果的实现
Android 图片合成:添加蒙板效果 不规则相框 透明度渐变效果的实现 暂时还未有时间开发这效果,所以先贴出来. 先贴一张效果图,这是一张手机截屏: 左上方的风景图:背景图片 右上方的人物图:前景图 ...
- 杭电1142(最短路径+dfs)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- 安全:加固你的ssh 登录
SSH 是我们控制虚拟主机的一种途径,这个途径可以让我们拥有完全的控制权,如果对于这个控制权没有进行很好的安全处理,那么将会造成很大的安全问题. 我们可以在系统的日志文件 (例如:/var/ ...
- 【poj】1001
[题目] ExponentiationTime Limit: 500MS Memory Limit: 10000KTotal Submissions: 123707 Accepted: 30202De ...
- hdu5772-String problem(最大权闭合子图问题)
解析: 多校标答 第一类:Pij 表示第i个点和第j个点组合的点,那么Pij的权值等于w[i][j]+w[j][i](表示得分)第二类:原串中的n个点每个点拆出一个点,第i个点权值为 –a[s[i]] ...
- 微信内置浏览器的JsAPI(WeixinJSBridge续)_Alien的笔记
微信内置浏览器的JsAPI(WeixinJSBridge续)_Alien的笔记 微信内置浏览器的JsAPI(WeixinJSBridge续)进入全屏 之前有写过几篇关于微信内置浏览器(WebView) ...