文档章节

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

muyu
 muyu
发布于 2016/11/13 00:29
字数 587
阅读 563
收藏 8
点赞 0
评论 0

今天用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
海淀
程序员
【php增删改查实例】第二十六节 - 个人详情页制作

在一般的系统中,当用户点击头像的时候,就会跳转到对应的个人详情页,在这个页面,他可以查看和修改自己的个人信息,或者更换头像。 本案例中,个人详情页使用bootstrap框架。 首先,我们新...

剽悍一小兔 ⋅ 06/07 ⋅ 0

使用so动态链接库g++正确,gcc undefined reference错误

在调用libcyusb.so时出现undefined reference错误,具体过程如下: test.c如下: cyusb_open为libcyusb.so中的库函数,使用 g++ test.c -lcyusb 可正确编译 gcc test.c -lcyusb 错误,提示c...

悲催的古灵武士 ⋅ 02/06 ⋅ 0

我是木予/nutz_baas

nutz_baas 修改baas部分代码 添加部分代码,主要在com.my目录下 可以和X5的Baas事务完全融合,事务交给Baas管理,nutz不管理 Wex5 WeX5是H5 App开发工具,Apache开源,免费开放所有代码,所开...

我是木予 ⋅ 2016/05/05 ⋅ 0

WeX5开源前端/WeX5

WeX5跨端移动开发框架开源项目简介 一、WeX5是什么 WeX5是H5 App开发工具,开源免费,极速秒开;只需一次开发,即可发布、运行于各种前端平台上;支持iOS ipa、android apk、微信服务号/企业...

WeX5开源前端 ⋅ 2015/01/14 ⋅ 0

H5 App开发工具--WeX5

WeX5是H5 App开发工具,Apache开源,免费开放所有代码,所开发的应用均能“一秒打开”!对跨平台多前端应用开发的支持极好,一次开发,多平台运行。 WeX5采用混合应用(hybrid app)开发模式...

muyu ⋅ 2015/01/10 ⋅ 9

使用牛刀云开发微信小程序(问题集锦)

前不久,起步科技正式推出牛刀云1.0,我想这也应该是许多WeX5的忠诚追随者(我也算是其中之一吧)期望的结果了。使用牛刀云开发微信小程序,能够实现使用类似于WeX5的所见即所得组件积木搭建...

朱先忠老师 ⋅ 2017/12/09 ⋅ 0

WeX5 V3.1.1 正式版发布,跨端移动开发框架

WeX5 V3.1.1 正式版发布,更新内容如下: 2015-5-15 V3.1.1 基于V3.1正式版(4月17日)修改如下问题 1. 动态生成的contents中的content手机端运行的时候手滑动改变content页active的索引值不会...

muyu ⋅ 2015/05/18 ⋅ 2

App跨平台开发框架分析

所谓的跨平台app开发就是一套代码写完以后可以多端发布运行到各个平台,比如:安卓、iOS、web。 原生开发是一对一的,安卓、iOS需要分别写两套代码,学习成本高、开发成本高、后期维护麻烦;...

yiranhaiziqi ⋅ 2017/09/11 ⋅ 0

WeX5 快速开发平台 V3.4 正式版发布

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

muyu ⋅ 2016/04/01 ⋅ 17

WeX5 V3.1 预发布版,跨端移动开发框架

版本新特性 1. 提供轻量级和扩展性强的数据Baas核心库(Java版,后面陆续会提供更多语言版本),为WeX5提供完整的前后端交互能力,支持单条和批数据的增删改查、主从级联、树形数据、分页加载...

muyu ⋅ 2015/03/09 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

NFS介绍 NFS服务端安装配置 NFS配置选项

NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导...

lyy549745 ⋅ 5分钟前 ⋅ 0

Spring AOP 源码分析 - 筛选合适的通知器

1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析。本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出合适的通知器(Advisor...

java高级架构牛人 ⋅ 28分钟前 ⋅ 0

HTML-标签手册

标签 描述 <!--...--> 定义注释。 <!DOCTYPE> 定义文档类型。 <a> 定义锚。超链接 <abbr> 定义缩写。 <acronym> 定义只取首字母的缩写。 <address> 定义文档作者或拥有者的联系信息。 <apple......

ZHAO_JH ⋅ 30分钟前 ⋅ 0

SylixOS在t_main中使用硬浮点方法

问题描述 在某些使用场景中,应用程序不使用动态加载的方式执行,而是跟随BSP在 t_main 线程中启动,此时应用代码是跟随 BSP 进行编译的。由于 BSP 默认使用软浮点,所以会导致应用代码中的浮...

zhywxyy ⋅ 37分钟前 ⋅ 0

JsBridge原理分析

看了这个Github代码 https://github.com/lzyzsd/JsBridge,想起N年前比较火的Hybrid方案,想看看现在跨平台调用实现有什么新的实现方式。代码看下来之后发现确实有点独特之处,这里先把核心的...

Kingguary ⋅ 49分钟前 ⋅ 0

Intellij IDEA神器常用技巧五-真正常用快捷键(收藏级)

如果你觉得前面几篇博文太啰嗦,下面是博主多年使用Intellij IDEA真正常用快捷键,建议收藏!!! sout,System.out.println()快捷键 fori,for循环快捷键 psvm,main方法快捷键 Alt+Home,导...

Mkeeper ⋅ 49分钟前 ⋅ 0

Java 静态代码分析工具简要分析与使用

本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,...

Oo若离oO ⋅ 51分钟前 ⋅ 0

SpringBoot自动配置小记

spring-boot项目的特色就在于它的自动配置,自动配置就是开箱即用的本源。 不过支持一个子项目的自动配置,往往比较复杂,无论是sping自己的项目,还是第三方的,都是如此。刚接触会有点乱乱...

大_于 ⋅ 今天 ⋅ 0

React jsx 中写更优雅、直观的条件运算符

在这篇文字中我学到了很多知识,同时结合工作中的一些经验也在思考一些东西。比如条件运算符 Conditional Operator condition ? expr_if_true : expr_if_false 在jsx中书写条件语句我们经常都...

开源中国最帅没有之一 ⋅ 今天 ⋅ 0

vim编辑模式与命令模式

5.5 进入编辑模式 从编辑模式返回一般模式“Esc” 5.6 vim命令模式 命令 :“nohl”=no high light 无高亮,取消内容中高亮标记 "x":保存退出,和wq的区别是,当进入一个文件未进行编辑时,使...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部