ExtJS MVC框架搭建(三)

ExtJS实现用户修改功能教程
本教程基于“ExtJS MVC框架搭建(二)”完成增删改功能,重点介绍用户修改功能。包括在指定目录新建Edit.js文件、向控制器注册视图对象、实现双击列表数据显示编辑窗口并回显数据、保存编辑数据,最后将数据更新到后台,还总结了添加编辑修改功能的步骤。

本教程是这 “ExtJS MVC框架搭建(二)”之上 完成增删改功能

一、完成用户修改功能

1)在app/view/user/ 目录下,新建 Edit.js(用于编辑用户列表)

Edit.js 内容如下:

Ext.define('OA.view.user.Edit', {
	extend: 'Ext.window.Window',
	alias: "widget.useredit",       // 给试图界面取个别名,在别的地方会用到(如:控制器)
	title: '编辑用户',
	
	layout: 'fit',
	autoShow: true,                // 创建 window 组件时自动显示
	
	initComponent: function(){
		this.items = [{
			xtype: 'form',
			items: [{
				xtype:'textfield',
				name: 'name',            //表单中字段属性名字要与 列表中(List.js)的一致
				fieldLabel: "姓名"
			}, {
				xtype:'textfield',
				name: 'email',
				fieldLabel: "电子邮件"
			}]
		}];
		
		this.buttons = [{
			text:'保存',
			action: 'save'
		}, {
			text:'取消',
			scope: this,            //这里的 this 代表的是这个 window 窗口
			handler: this.close
		}];
		
		this.callParent(arguments);
	}
	
	
});

2)向 控制器(app/controller/Users.js)中注册 Edit.js试图对象。

3)双击列表中的数据后,显示 编辑窗口,并且回显数据

实现效果如图:

修改控制器(app/controller/Users.js) 代码如下:

Ext.define('OA.controller.Users', {
	extend: 'Ext.app.Controller',
	
	models: [
		'User'
	],
	
	stores: [
		'Users'			//先向 控制器中注册 store组件, 然后在 view层才可以使用这个 store存储的数据
	],
	
	views: [
		'user.List',
		'user.Edit'
	],
	
	init: function(){
		this.control({
			'viewport > userlist': {
				itemdblclick: this.editUser
			}
		});
	},
	editUser: function(grid, record){
		console.info('名字:'+ record.get('name')+",电子邮件:"+record.get('email'));
		var view = Ext.widget('useredit');
		view.down('form').loadRecord(record);
	}
});

PS:①、‘viewprot > userlist’ 是一种查找组件的写法,意思是 选择 viewport 组件里面的 userlist组件(即 xtype=userlist 的那个组件)

        ②、'viewport > userlist': {
                    itemdblclick: this.editUser
                }

               表示 选中这个 userlist 组件,给它添加一个 itemdbclick (双击事件)的监听事件,当双击该组件时执行 this.editUser 方法

        ③、editUser 方法主要是用来加载双击列表中的数据

4)保存编辑的数据

代码如下:

控制器代码(app/controller/Users.js )如下:

Ext.define('OA.controller.Users', {
	extend: 'Ext.app.Controller',
	
	models: [
		'User'
	],
	
	stores: [
		'Users'	//先向 控制器中注册 store组件, 然后在 view层才可以使用这个 store存储的数据
	],
	
	views: [
		'user.List',
		'user.Edit'
	],
	
	init: function(){
		this.control({
			'viewport > userlist': {
				itemdblclick: this.editUser
			},
			'useredit  button[action="save"]': {
				click: this.updateUser
			}
		});
	},
	editUser: function(grid, record){
		console.info('名字:'+ record.get('name')+",电子邮件:"+record.get('email'));
		var view = Ext.widget('useredit');
		view.down('form').loadRecord(record);
	},
	updateUser: function(button){
		//console.info('button.click');
		var win = button.up('window');
		var form =win.down('form');
		var record = form.getRecord();
		var values = form.getValues();
		record.set(values);
		win.close();
	}
});

5) 将数据更新到后台

在步骤 4)中更新的数据只在当前窗口做了更改,数据没有同步到后台。因此看到修改后的数据是这样的

数据同步到后台需要修改 store组件(app/store/Users.js)

 a) 在updateUser 方法中添加如下代码

this.getUsersStore().sync();

b) 修改后的 app/store/Users.js 代码如下:

Ext.define('OA.store.Users', {
	extend: 'Ext.data.Store',
	model: 'OA.model.User',
	
	autoLoad: true,
//	proxy: {
//		type: 'ajax',
//		url:'data/users.json',
//		reader: {
//			type: 'json',
//			root:'users',
//			successProperty: 'success'
//		}
//	}
	proxy: {
		type: 'ajax',
		api: {
			read: 'data/users.json',
			update: 'data/updateUsers.json'
		},
		reader: {
			type:'json',
			root: 'users',
			successProperty: 'success'
		}
	}
	
});

c) 在 webapp/data/ 目录下,新建 updateUsers.json 文件,内容如下:

{success: true}

总结:

新添加 编辑修改功能的过程

1) 新添 编辑页面

2) 将编辑页面注册到 控制器中

3)在控制器中 通过组件查找的方式来注册监听事件来完成编辑功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值