题记:研究使用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的更多相关文章

  1. Spring MVC中forward请求转发2种方式(带参数)

    Spring MVC中forward请求转发2种方式(带参数) http://www.51gjie.com/javaweb/956.html  

  2. 【笔记】Asp.Net WebApi对js POST带参数跨域请求的支持方案

    先说下需求:在原来的WebApi项目中增加对js跨域的请求支持,请求方式:以POST为主,webapi路由规则根据原项目需求修改如下: public static void Register(Http ...

  3. 用gulp打包带参数资源做法与asp.net/java项目结合的自动构建方案探讨

    先探讨方案,后续再实现. gulp打包前端教程配置:http://www.cnblogs.com/EasonJim/p/6209951.html 可能存在以下场景: 1.整个服务端采用接口的形式暴露给 ...

  4. C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取

    一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...

  5. spring配置带参数的视图解析器:ParameterMethodNameResolver

    1.配置处理器 <!-- 处理器 --> <bean id="myController" class="cn.cnsdhzzl.controller.M ...

  6. ajaxFileUpload带参数提交(亲测可用)

    使用ajaxFileUpload上传文件时,有时需要带参数提交,网上有很多资料说使用data,但其实要使用data带参数是需要修改的,否则后台是获取不到的. 分析原因: ajaxFileUpload为 ...

  7. 通用后台管理系统(ExtJS 4.2 + Spring MVC 3.2 + Hibernate)

    通用后台管理系统(ExtJS 4.2 +Spring MVC 3.2 + Hibernate) 开发语言JAVA 成品成品 前端技术extjs 数据库mysql,sql server,oracle 系 ...

  8. 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.解压后打开解决方案,解决方案目录: ...

  9. springMVC带参数请求重定向

    SpirngMVC返回逻辑视图名 可以分下面几种情况: 1. servlet进行请求转发,返回到jsp页面,如  return "index.jsp" ; 2. servlet 返 ...

随机推荐

  1. SharePoint Server 2013 安装篇 - 如何解决无法找到 .net 4.5 的问题

    SharePoint Server 2013 在安装前,是不能安装 VS 等会自动安装 .net 4.5.x 以上版本的 .net Framework 的软件的.因为安装了 .net Framewor ...

  2. java线程池ThreadPool

    package com.java.concurrent; import java.util.concurrent.ExecutorService; import java.util.concurren ...

  3. Problem D: 栈小游戏

    #include <iostream> #include <vector> #include <stack> #include <algorithm> ...

  4. 分布式框架Dubbo入门

    Dubbo简介 Dubbo是一个Alibaba开源额分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.dubbo就是个服务框架,只有在分布式的时候,才有dubb ...

  5. C#继承中的override(重写)与new(覆盖)用法

    刚接触C#编程,我也是被override与new搞得晕头转向.于是花了点时间翻资料,看博客,终于算小有领悟,把学习笔记记录于此. 首先声明一个父类Animal类,与继承Animal的两个子类Dog类与 ...

  6. RobotFramework自动化测试环境配置

    现在工作是做自动化测试平台维护的,平台用的C#做的,主要是用来测试CMBRun项目,它是c/s结构的项目,而b/s结构的项目主要使用RF+Python来做.做这块之前听过自动化测试,身边的朋友也有做这 ...

  7. sysbench

    安装 http://www.cnblogs.com/zhoujinyi/archive/2013/04/19/3029134.html http://space.itpub.net/758322/vi ...

  8. select * from 的一些心得

    如何简单运用好 select * from语句,在不同的函数下,有不同的先后顺序. 语法格式 (代表先后顺便) (2)select 字段名 查询什么东西 (1)from 表名,从哪个表查询 例如:查询 ...

  9. MVC 小案例 -- 信息管理

    前几次更新博客都是每次周日晚上到周一,这次是周一晚上开始写,肯定也是有原因的!那就是我的 Tomact 忽然报错,无法启动,错误信息如下!同时我的 win10 也崩了,重启之后连 WIFI 的标志也不 ...

  10. 微信小程序开发《三》:微信小程序请求不能使用session的原因及解决办法

    本人在前面的微信小程序开发<二>中提到要想在服务端保持状态需要在客户端第一次请求服务器的时候给客户端返回一个sessionid,由客户端在本地保存,下次请求的时候在header里面带上这个 ...