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 返 ...
随机推荐
- 补写:Best Coder #85 1001 Sum(前缀和)
sum Accepts: 640 Submissions: 1744 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/13107 ...
- 暑假练习赛 004 E Joint Stacks(优先队列模拟)
Joint StacksCrawling in process... Crawling failed Time Limit:4000MS Memory Limit:65536KB 64 ...
- [原创]Faster R-CNN论文翻译
Faster R-CNN论文翻译 Faster R-CNN是互怼完了的好基友一起合作出来的巅峰之作,本文翻译的比例比较小,主要因为本paper是前述paper的一个简单改进,方法清晰,想法自然.什 ...
- Docker简介和安装
1.Docker 和传统虚拟化方式的不同之处 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程: 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核 ...
- Debian6单用户模式
开始的时候按"e"进入Grub的编辑界面,这个时候要找:linux /boot/vmlinuz-2.6.32-5-amd64 root=UUID=.......... ro qui ...
- 一个简单的MVC框架的实现-基于注解的实现
1.@Action注解声明 package com.togogo.webtoservice.annotations; import java.lang.annotation.Documented; i ...
- Django中请求的生命周期
1. 概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页中. Django的请求生命周期是指当用户 ...
- Google Play 购买(IAB)测试流程
Google Play 购买(IAB)测试流程 0. 前言 虽然Google 官方也有说明,但是说话很含糊(英文原文也很含糊),很多时候不清楚它到底表达什么.而且帮助文档和开发文档是分开的,可能常常出 ...
- 64位win7下安装Boost 1.59.0 + boost.python 1.59.0 + gccxml + pygccxml + pyplusplus(py++)
由于安装过程中实在是出现了N多问题,所以不得不专门写个帖子来记录一下这破东西在Win7下的安装过程,避免以后还要再用的时候踩坑. 1.Boost简介 Boost库是一个可移植.提供源代码的C++库,作 ...
- c#中将IP地址转换成无符号整形数的方法与逆变换方法
我们知道 IP地址就是给每个连接在Internet上的主机分配的一个32bit地址. 按照TCP/IP协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节.而c#中 ...