文档章节

wex5和nutz集成,前端wex5,后端nutz

muyu
 muyu
发布于 2016/11/13 00:29
字数 587
阅读 588
收藏 8

今天用wex5解决数据维护的需求,需求比较简单,订单数据的查询、新增、删除、更新。

  1. 功能界面见下图

2. wex5的代码片段,主要是data组件的两个事件orderDataCustomRefresh、orderDataCustomSave

  • orderDataCustomRefresh
	Model.prototype.orderDataCustomRefresh = function(event){
		var searchVal = this.getElementByXid("searchInput").value;
		var dfd =$.Deferred();
		var doRefresh =function(event,dfd){
			justep.Baas.sendRequest({
				"url" : "/ecoolper/order",
				"action" : "queryAction",
				"async" : true,
				"params" : {
					"searchVal" : searchVal,
					"limit" : event.limit,
					"offset" : event.offset
				},
				"success" : function(table) {
					event.source.loadData(table,event.options.append);
					dfd.resolve();
				}
			});
			return dfd.promise();
		}(event,dfd);
		event.promise =$.when(doRefresh);
	};
  • orderDataCustomSave
	Model.prototype.orderDataCustomSave = function(event){
		var dfd =$.Deferred();
		var doSave =function(event,dfd){
			justep.Baas.sendRequest({
				"url" : "/ecoolper/order",
				"action" : "saveAction",
				"async" : true,
				"params" : {
					table : event.source.toJson(true)
				},
				"success" : function(data) {
					dfd.resolve();
				}
			});
			return dfd.promise();
		}(event,dfd);
		event.promise =$.when(doSave);
	};

这里用到了jquery的Deferred特性,5.2版本是没有这个特性的。

  • x5 studio的设计界面

3. nutz后端 后端用的baaServer做的改造,BaasServer工程在runtime目录下,先把BaasServer工程导入到studio中,再做改造。

后端主要用到OrderAction的两个方法query、saveAction

  • query
	@At("/queryAction")
	@Ok("json")
	@AdaptBy(type = JsonAdaptor.class)
	public JSONObject query(@Param("..") JSONObject params) {
		Integer limit = params.getInteger("limit");
		Integer offset = params.getInteger("offset");
		String searchVal =params.getString("searchVal");
		Cnd cnd = Cnd.NEW();
		if(Strings.isNotBlank(searchVal)){
			searchVal ="%"+searchVal+"%";
			cnd.or("userName","like", searchVal);
			cnd.or("phoneNumber", "like",  searchVal);
			cnd.or("address", "like", searchVal);
			cnd.or("content", "like", searchVal);
		}

		int pageNumber = (int) Math.ceil(offset / limit) + 1;
		Pager pager = new Pager();
		pager.setPageNumber(pageNumber);
		pager.setPageSize(limit);
		List<Order> rows = dao.query(Order.class, cnd, pager);
		// 设置总个数
		pager.setRecordCount(dao.count(Order.class, cnd));

		JSONObject table = new JSONObject();
		table.put("@type", "table");// 设置type
		table.put("rows", rows);// rows
		JSONObject userdata = new JSONObject();
		userdata.put("sys.count", pager.getRecordCount());
		table.put("userdata", userdata);// 设置userdata
		return table;
	}
  • saveAction
	@At("/saveAction")
	@AdaptBy(type = JsonAdaptor.class)
	@Aop(TransAop.READ_COMMITTED)
	public void saveAction(@Param("..") JSONObject params) throws ParseException {
		Table table = Transform.jsonToTable(params.getJSONObject("table"));
		// 更新
		List<Order> list = Transform2.tableToPojo(table, RowState.EDIT, Order.class);
		dao.update(list, DataUtils2.arrayJoin4Regex(table.getColumnNames().toArray(), "%s", "|"));
		// 添加
		list = Transform2.tableToPojo(table, RowState.NEW, Order.class);
		dao.insert(list);
		// 删除
		list = Transform2.tableToPojo(table, RowState.DELETE, Order.class);
		dao.delete(list);
	}
  • DataUtils2类
public class DataUtils2 {

	public static String arrayJoin4Regex(Object[] objects, String format, String separator) {
		StringBuffer buf = new StringBuffer();
		buf.append("^(");
		for (Object o : objects) {
			if (buf.length() > 0) {
				buf.append(separator);
			}
			buf.append(String.format(format, o.toString()));
		}
		buf.append(")$");
		return buf.toString();
	}
	
}
  • Transform2
public class Transform2 {
	public static <T> List<T> tableToPojo(Table table, RowState state, Class<T> type) {
		List<T> list = new ArrayList<>(); // 存放转换结果
		// 先得到所有字段名称
		Collection<String> names = table.getColumnNames();
		// 开始遍历row
		for (Row row : table.getRows(state)) {
			Map<String, Object> map = new HashMap<String, Object>();
			for (String name : names) {
				map.put(name, row.getValue(name));
			}
			T t = Lang.map2Object(map, type);
			list.add(t);
		}
		return list;
	}
}

源码位置:http://bbs.wex5.com/forum.php?mod=viewthread&tid=108674&extra=page%3D1

© 著作权归作者所有

共有 人打赏支持
muyu

muyu

粉丝 35
博文 35
码字总数 3632
作品 0
海淀
程序员
私信 提问
完全开源的App开发框架WeX5之数据绑定02:visible绑定

上周分享了WeX5数据绑定(Data Bindings)的初步体验(点击查看);现继续跟小伙伴们分享WeX5数据绑定之visible绑定。 (提示:WeX5是一个彻底开源的app开发框架,每行源代码都可以自己改;能开...

WeX5移动开发云
2015/03/26
2.1K
0
WeX5 V3.3 正式版,跨端移动开发框架

WeX5 V3.3 正式版发布了,新增特性: 1、提供超轻量高性能服务框架(XBaaS),支持免代码或少量代码快速开发操作数据表的CRUD服务,目前v3.3版本提供了XBaaS的java和.net语言实现,后续会提供...

muyu
2016/01/19
3.4K
10
高性能+大数据的HTML5 App开发交流会【就这周日】

【活动说明】 HTML5技术正在席卷App行业,如何最高效率地开发出轻架构、高性能HTML5 App已是抢占潮流红利的关键。 同时,App说到底都是在围绕“数据”做生意,该用什么样的大数据技能武装自己...

极光推送
2016/05/18
1K
2
高性能HTML5 App开发,不只轻架构还有DevOps!

高性能遇上了云部署,一场HTML5与Docker的交流碰撞正在进行 HTML5开发正在横扫整个APP行业。 自HTML5定稿以来,这个风潮已无可置疑。人们的目光已由要不要采用H5变为了如何更好的使用H5。 工...

WeX5移动开发云
2016/06/22
1K
1
WeX5 快速开发平台 V3.4 正式版发布

WeX5 V3.4 正式版下载地址 http://pan.baidu.com/s/1jHBUDtc WeX5 V3.4正式版发布说明: 1、新增移动端模板32个:包括首页、数据列表、数据展示、注册、登录、搜索等常用单页面模板和完整应用...

muyu
2016/04/01
5.8K
17

没有更多内容

加载失败,请刷新页面

加载更多

微服务分布式事务实现

https://www.processon.com/view/link/5b2144d7e4b001a14d3d2d30

WALK_MAN
今天
2
0
《大漠烟尘》读书笔记及读后感文章3700字

《大漠烟尘》读书笔记及读后感文章3700字: 在这个浮躁的社会里,你有多久没有好好读完一本书了? 我们总觉得自己和别人不一样,所以当看到别人身上的问题时,很少有“反求诸己”,反思自己。...

原创小博客
今天
4
0
大数据教程(9.5)用MR实现sql中的jion逻辑

上一篇博客讲解了使用jar -jar的方式来运行提交MR程序,以及通过修改YarnRunner的源码来实现MR的windows开发环境提交到集群的方式。本篇博主将分享sql中常见的join操作。 一、需求 订单数据表...

em_aaron
今天
3
0
十万个为什么之什么是resultful规范

起源 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点...

尾生
今天
3
0
Terraform配置文件(Terraform configuration)

Terraform配置文件 翻译自Terraform Configuration Terraform用文本文件来描述设备、设置变量。这些文件被称为Terraform配置文件,以.tf结尾。这一部分将讲述Terraform配置文件的加载与格式。...

buddie
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部