ExtJs 带参数的MVC
题记:研究使用ext两个星期了,从痛苦中逐渐走向明朗。
展示列表的子列表的数据时需要将当前的数据传给下一个mvc。
比如用户列表,点击一个用户查看该用户的日志列表。
首先是controller,放一个方法,注意showLog方法的两个参数,还有mvcConfig参数是我的自定义参数,供下一个mvc去调用。用Ext.applation动态添加controller。
Ext.define("admin.controller.collection.MembController", {
extend: "Ext.app.Controller",
views: ["collection.membList"],
models: ["collection.MembModel"],
stores: ["collection.MembStore"],
init: function () { if (!Ext.getCmp('membList')) { var tab = Ext.create('custom.panelTab');
var view = Ext.create('admin.view.collection.membList');
tab.createTab(view);
} else {
Ext.getCmp('membList').show();
} },
//查看日志
showLog: function (grid, rowIndex) {
var me = this;
var ctrl = Ext.create('admin.controller.collection.MembController');
var record = this.getStore().getAt(rowIndex); var rowData = grid.store.data.items[rowIndex].data; //添加controller
Ext.application({
extend: 'Ext.app.Application',
appFolder: "app/",//文件路径
name: 'admin',
controllers: ['collection.SingleLogController'],
mvcConfig: {
userId: rowData.id
}
});
}
});
在view中绑定点击事件,这个比较基础
Ext.define('admin.view.collection.membList', {
extend: 'Ext.grid.Panel',
requires: ['mc.date'],
xtype: 'grid',
title: '成员管理',
id: 'membList',
closable: true,
store: 'collection.MembStore',
initComponent: function () {
var me = this;
var ctrl = Ext.create('admin.controller.collection.MembController'); Ext.apply(me, {
columns: [
{
header: '编号',
dataIndex: 'id',
width: 60,
},
{
header: '姓名',
dataIndex: 'username',
width: 120,
},
{
header: '操作',
xtype: 'actioncolumn',
width: 50,
sortable: false,
menuDisabled: true,
items: [
{
icon: 'resources/css/ext/images/icons/fam/user_suit.png',
tooltip: '工作日志',
scope: this,
handler: ctrl.showLog
} ]
}
]
}); me.callParent(arguments);
}
});
接下来就是日志的controller处理了。
Ext.define('admin.controller.collection.SingleLogController', {
extend: 'Ext.app.Controller',
views: ['collection.memberLogList'],
models: ['collection.LogModel'],
stores: ['collection.SingleLogStore'],
init: function () { var mvcConfig = this.getApplication().mvcConfig; //console.log('系统日志');
if (!Ext.getCmp('memberLogList')) { var tab = Ext.create('custom.panelTab');
var view = Ext.create('admin.view.collection.memberLogList');
var store = view.getStore();
store.setProxy({
type: 'jsonp',
url: ajaxConfig.member.logList,//+ "?id=" + mvcConfig.userId
extraParams: {//参数 //memberId: mvcConfig.userId
"params": "{member:" + mvcConfig.userId + "}"
}, reader: {
totalProperty: 'total',
root: 'results'
}
});
//store.load();由于第一次是自动加载执行,所以不需要手动载入 tab.createTab(view);
} else {
var view = Ext.getCmp('memberLogList');
var store = view.getStore(); store.setProxy({
type: 'jsonp',
url: ajaxConfig.member.logList,//+ "?id=" + mvcConfig.userId
extraParams: {//参数 //memberId: mvcConfig.userId
"params": "{member:" + mvcConfig.userId + "}"
}, reader: {
totalProperty: 'total',
root: 'results'
}
});
store.reload();
Ext.getCmp('memberLogList').show();
}
}, });
注意自定义参数的获取,与store对数据的控制。
由于Ext的mvc是按文件系统(fileSystem)化分逻辑的,所以上面的代码段是分别放在不同的js文件中的,路径和类名的对应关系注意一下。
再说一下Ext的机制,模块按需加载,模块的组件间按配置与逻辑引入。首先是Ext.applation是最顶级的管理者,所有的组件(或者叫应用,英文原称Application),然后每个mvc从自己的application开始。比如点击某个dom要创建一个应用,可以点击之后执行下面代码:
var app = $(this).attr('data-app');
Ext.create(app);
很显然我用的是jquery来作为辅助实现,这里的app是“admin.app.collection.log”,然后Ext会加载js文件,文件内容如下:
Ext.define('admin.app.collection.log', {
extend: 'Ext.app.Application',
name: 'admin',
controllers: ['collection.LogController'],
mvcConfig: {
userId:1
}
});
这就创建了一个application,然后再由application加载配置的controller,文件式加载就完成了。上面第一个代码块中的Ext.application与上面js文件中的Ext.define基本相同。
那么有什么不同呢,说几点我的理解,未必正确仅供参考:
1、Ext是先解析再执行,那么js文件加载进来的要解析,会添加进总体控制中,在chrome中可对controller中的代码断点调试。
2、用Ext.application加载的模块是脱离控制的,文件没有进入no domain队列,所以没有调试入口。
还有几个问题没有解决:
1、在view中怎么更具data(也可以说是store)动态控制呈现的元素与行为逻辑。
2、怎样动态指定view的id,实现多tab展示。
ExtJs 带参数的MVC的更多相关文章
- Spring MVC中forward请求转发2种方式(带参数)
Spring MVC中forward请求转发2种方式(带参数) http://www.51gjie.com/javaweb/956.html
- 【笔记】Asp.Net WebApi对js POST带参数跨域请求的支持方案
先说下需求:在原来的WebApi项目中增加对js跨域的请求支持,请求方式:以POST为主,webapi路由规则根据原项目需求修改如下: public static void Register(Http ...
- 用gulp打包带参数资源做法与asp.net/java项目结合的自动构建方案探讨
先探讨方案,后续再实现. gulp打包前端教程配置:http://www.cnblogs.com/EasonJim/p/6209951.html 可能存在以下场景: 1.整个服务端采用接口的形式暴露给 ...
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...
- spring配置带参数的视图解析器:ParameterMethodNameResolver
1.配置处理器 <!-- 处理器 --> <bean id="myController" class="cn.cnsdhzzl.controller.M ...
- ajaxFileUpload带参数提交(亲测可用)
使用ajaxFileUpload上传文件时,有时需要带参数提交,网上有很多资料说使用data,但其实要使用data带参数是需要修改的,否则后台是获取不到的. 分析原因: ajaxFileUpload为 ...
- 通用后台管理系统(ExtJS 4.2 + Spring MVC 3.2 + Hibernate)
通用后台管理系统(ExtJS 4.2 +Spring MVC 3.2 + Hibernate) 开发语言JAVA 成品成品 前端技术extjs 数据库mysql,sql server,oracle 系 ...
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
ASP.NET Boilerplate 学习 1.在http://www.aspnetboilerplate.com/Templates 网站下载ABP模版 2.解压后打开解决方案,解决方案目录: ...
- springMVC带参数请求重定向
SpirngMVC返回逻辑视图名 可以分下面几种情况: 1. servlet进行请求转发,返回到jsp页面,如 return "index.jsp" ; 2. servlet 返 ...
随机推荐
- Buy the Ticket(卡特兰数+递推高精度)
Buy the Ticket Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- 五种js判断是否为整数(转)
五种js判断是否为整数类型方式 作者:snandy 这篇文章主要介绍了五种JavaScript判断是否为整数类型方式,需要的朋友可以参考下 这篇看看如何判断为整数类型(Integer),JavaS ...
- Android 开发笔记___spinner__适配器基础_arrayadapter
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...
- Node.js Stream(流)
Stream 是一个抽象接口,Node 中有很多对象实现了这个接口.例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出). Node.js,Str ...
- AngularJS学习篇(三)
创建自定义的指令 除了 AngularJS 内置的指令外,我们还可以创建自定义指令. 你可以使用 .directive 函数来添加自定义的指令. 要调用自定义指令,HTML 元素上需要添加自定义指令名 ...
- Linux安装nginx代理服务器
Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. ...
- 再学习之MyBatis
一.框架基本介绍 1.概念 支持普通SQL查询.存储过程和高级映射,简化和实现了Java 数据持久化层的的开源框架,主要流行的原因在于他的简单性和易使用性. 2.特点 持久层 .ORM(对象关系映射) ...
- node.js安装——Windows7系统下的安装及其环境部署——特别详细
作为一个前端的菜鸟同学,之间也没学过什么框架,目前公司做项目,所用到的webpack+node.js+vue. 首先,关于node的环境部署方面,建议官网安装node.js,最好不要安装非稳定版的版本 ...
- Weblogic之简介
一.简介(来自百度百科) WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发.集成.部署和 ...
- 在网页标题栏title加入图标?
方法一:制作一个ico格式的图片,将图片命名为favicon.ico,像素大小为16*16,所使用的颜色不得超过16色,然后再把favicon.ico放到网站的根目录下就行了.这样的话浏览器会不停的搜 ...