ExtJS MVC 学习手记3
在演示应用中,我们已经创建好了viewport,并为之添加了一个菜单树。但也仅仅是这样,点击树或应用的其他地方获得不到任何响应。这个演示应用还是一个死的应用。
接下来,我们让这个应用活起来。
首先,给树添加一个点击事件。以前的做法是使用listener属性,添加事件监听及处理函数。现在的做法也是采用了类似的方法,修改MenuController.js:
Ext.define('demo.controller.MenuController', {
extend: 'Ext.app.Controller',
stores: ['MenuStore'],
model: ['MenuModel'],
views: ['TreeMenu'],
init: function(){
this.control({
'treemenu' : {
itemclick: this.treeHandle
}
});
},
treeHandle: function(view, record){
alert(record.data.text);
}
});
我们使用了controller的init函数。init函数在应用启动时就开始执行,通常它会和control函数一起使用来实现事件的监听和处理。在control函数中我们再次使用了选择器以找到要添加事件的对象。
点击树的节点,效果如下:

实现了事件的响应还不够。在平时的开发中经常需要实现的功能是:点击左侧菜单,在右侧内容面板中做出适当响应。
为了实现这个目标,我们先对json数据及model做些调整。
修改后的menu.json:
{
children: [{
id: 1,
text: '用户管理',
leaf: false,
expanded: true,
children: [{
id: 11,
pid: 1,
text: '角色管理',
leaf: true
},{
id: 12,
pid: 1,
text: '信息管理',
leaf: true
}]
},{
id: 2,
text: '系统管理',
leaf: false,
expanded: true,
children: [{
id: 21,
pid: 2,
text: '数据字典管理',
leaf: true
},{
id: 22,
pid: 2,
text: '日志管理',
leaf: true
}]
}]
}
我们在json数据中添加了id和pid属性。相应的model也要做出调整。MenuModel.js:
Ext.define('demo.model.MenuModel', {
extend: 'Ext.data.Model',
fields: ['id', 'pid', 'text', 'leaf']
});
再添加一个内容视图Content.js:
Ext.define('demo.view.Content', {
extend: 'Ext.panel.Panel',
alias: 'widget.content',
title: '系统内容',
margins: '5 5 5 0',
layout: 'form',
defaults: {xtype: 'displayfield', labelAlign:'right', labelWidth:120}
});
接下来,继续对MenuController作出调整:
Ext.define('demo.controller.MenuController', {
extend: 'Ext.app.Controller',
stores: ['MenuStore'],
model: ['MenuModel'],
views: ['TreeMenu'],
refs: [{ref:'content', selector:'content'}],
init: function(){
this.control({
'treemenu' : {
itemclick: this.treeHandle
}
});
},
treeHandle: function(view, record){
var content = this.getContent();
content.removeAll();
content.add({
fieldLabel: 'ID',
value: record.data.id
},{
fieldLabel: 'TEXT',
value: record.data.text
});
}
});
调整的地方有两处:使用了refs属性,修改了点击事件响应函数treeHandle。需要说明下的是refs属性。使用refs属性可以获取对象的引用。在上面的配置中“refs: [{ref:'content', selector:'content'}]”产生了一个getContent()方法,这个方法会去寻找选择器‘content’对应的对象。
看一下运行效果:

点击左侧的菜单树,在右侧的内容面板中会有相应的提示。
效果还是很简单。不过了解了这些,应该可以自己动手去实现应用了。
关于MVC的学习手记可以于此告终了。
项目代码下载:http://download.csdn.net/detail/tianxiexingyun/7405471
ExtJS MVC 学习手记3的更多相关文章
- ExtJS MVC学习手记
开始学习ExtJS的MVC了.这篇文章仅是用来做一个目录,为自己这个阶段的学习内容做个索引. 手记涉及的文章: EXTJS MVC结构(译自ExtJS4.0文档中的<MVC Architectu ...
- ExtJS MVC学习手记 2
开发环境 eclipse(indigo) ExtJS4.0 开发目标 使用store.model和controller创建菜单树 开发步骤 之前我们已经建立了一个MVC的项目框架.现在要做的就是在这个 ...
- ExtJS MVC学习手记 1
开发环境: ExtJS4.2 eclipse indigo 开发目标 搭建项目框架,创建viewport 开发步骤说明 这次主要使用extjs4的mvc模式创建viewport.籍此初步了解mvc模 ...
- Extjs MVC学习随笔01
Extjs Mvc模式下的整个MVC框架体系即下图: 包含了Controller(实现方法层),Store(数据来源管理层),View(页面布局层).之所以用MVC我想是因为减轻针对某一页面的单一的J ...
- Linux.NET学习手记(7)
前一篇中,我们简单的讲述了下如何在Linux.NET中部署第一个ASP.NET MVC 5.0的程序.而目前微软已经提出OWIN并致力于发展VNext,接下来系列中,我们将会向OWIN方向转战. 早在 ...
- Linux.NET学习手记(8)
上一回合中,我们讲解了Linux.NET面对OWIN需要做出的准备,以及介绍了如何将两个支持OWIN协议的框架:SignalR以及NancyFX以OwinHost的方式部署到Linux.NET当中.这 ...
- EF框架学习手记
转载: [ASP.NET MVC]: - EF框架学习手记 1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架 ...
- Extjs MVC模式开发,循序渐进(一)
本文讲述extjs mvc的Helloworld,tabPanel,event,页面布局layout等内容. 本页包含:MVC模式案例(一)~MVC模式案例(六),从搭建extjs mvc到点击按钮生 ...
- .NET MVC 学习笔记(二)— Bootstrap框架
二..NET MVC 学习笔记(一)—— Bootstrap框架 在实际开发过程中,页面的样式问题是让人很头疼的问题,良好的用户界面可以大大提高用户体检,而在你没有前端开发人员的火力支援情况下,并不是 ...
随机推荐
- Android开发如何去除标题栏title
虽然是一个小问题,今天遇到了,也就写下来吧.防止自己忘掉. 取消标题栏的方式有两种,一种是在代码添加,另一种是在AndroidManifest.xml里面添加. 1.在代码中实现:在此方法setCon ...
- PL/SQL 导入excel表格到oracle数据表
通过使用PL/SQL 批量查询取数时,将excel中的每一列数据复制黏贴进新建的中间表,黏贴时会有贴歪的情况,也就是某些列会从第二第三行开始插入整列,导致数据乱掉,然后好像又不支持批量删除整列数据,所 ...
- 【Spring 2】spring的属性注入形式
一.注入简介 spring是一个java bean的容器,它摒弃了过去通过new关键字调用类再调用类的实例的形式,通过依赖注入维护者一系列的java bean的示例.通过spring所提供的依赖注入 ...
- 无法完成安装:'unsupported configuration: hda-duplex not supported in this QEMU binary'
Linux 有问必答:如何修复"hda-duplex not supported in this QEMU binary" 编译自:http://ask.xmodulo.com/h ...
- (笔记)angular Select选择
- 解决VirtualBox 上的XP 蓝屏,自动重复启动
启动时的蓝屏显示错误信息是: STOP 0x000000CE (...) DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS intelppm. ...
- 魔兽塔防游戏android源码
魔兽塔防是一款经典的游戏,当年在pc机器上玩过魔兽的人应该都玩过类似的游戏,他仿照魔兽,建塔拦截敌人入侵,发挥你的智慧让敌人走最远的路,将他们消灭在路上.... 源码下载:http://code.66 ...
- C puzzles详解【9-12题】
第九题 #include <stdio.h> int main() { float f=0.0f; int i; ;i<;i++) f = f + 0.1f; if(f == 1.0 ...
- Memento
#include <iostream> #include <string> using namespace std; class Memento { public: Memen ...
- c语言学习第四天数据类型1
int 代表整数,它在内存中占4个字节,二进制的表示方式是占用了三十二位,二进制中只包含0和1,那它的最大值就是全为1,但int是 有符号类型,所以最高位(左边的第一位)要拿出来做符号位,这样就只 ...