ExtJS MVC学习手记 2

开发环境


eclipse(indigo) ExtJS4.0

开发目标

使用store、model和controller创建菜单树

开发步骤

之前我们已经建立了一个MVC的项目框架。现在要做的就是在这个基础上给项目添加一个左侧菜单。

首先,在/app/中定义一个菜单视图类TreeMenu.js:

Ext.define(‘demo.view.TreeMenu‘, {
extend: ‘Ext.tree.Panel‘,
alias: ‘widget.treemenu‘,

title: ‘系统菜单‘,
margins: 5
});

我们定义的TreeMenu类继承了treepanel类,用于实现系统菜单。

alias表示类的别名。在我们需要使用这个类创建对象时,我们可以直接使用“xtype: ‘treemenu’”这样的方式。

然后我们在viewport中引用这个类:


Ext.define(‘demo.view.Viewport‘, {
extend: ‘Ext.container.Viewport‘,

layout: ‘border‘,

requires: [
‘demo.view.TreeMenu‘
],

items: [{
region: ‘north‘,
height: 65,
html: ‘<div style="text-align:center; font-size:36px;">ExtJS MVC 演示</div>‘
},{
region: ‘west‘,
width: 225,
xtype: ‘treemenu‘
},{
region: ‘center‘
}]
});

在viewport通过requires添加了对TreeMenu类的引用。“demo.view.TreeMenu”表示在命名空间demo下的view目录下的TreeMenu类。

之后使用xtype:’treemenu’创建了TreeMenu类的对象。

如下是演示效果:

我们现在只是创建了一个菜单树的面板。现在需要在面板中添加菜单树。

菜单树的数据从menu.json中获取:

而后使用store和model来获取数据。通常store决定获取数据的方式,model决定获取那些数据及数据样式(有时也会将获取数据的proxy置于model中),使用时通过store调用model。

这里是我们的model类MenuModel.js:

Ext.define(‘demo.model.MenuModel‘, {
extend: ‘Ext.data.Model‘,

fields: [‘text‘, ‘leaf‘]
});

我们的store类MenuStore.js:


Ext.define("demo.store.MenuStore",{
extend:‘Ext.data.TreeStore‘,

model: ‘demo.model.MenuModel‘,
autoLoad: true,

proxy: {
type:‘ajax‘,
url:‘menu.json‘,
reader: {
type: ‘json‘
}
}
});

这里有一个属性要说明下:autoLoad,true表示store创建完成后自动加载数据。

现在我们有数据了,也设置了获取数据的方式,接下来要做的就是通知应用来取数据。这里就需要controller了。controller是粘合应用的胶水。

如下是MenuController类:

Ext.define(‘demo.controller.MenuController‘, {
extend: ‘Ext.app.Controller‘,

stores: [‘MenuStore‘],
model: [‘MenuModel‘],
views: [‘TreeMenu‘]
});

如果之前有看过《ExtJS
MVC结构
》一文的话(建议看一下,官方文档说的比较详细透彻而且有比较好的实例),可以知道在controller中引用store后,就为store创建了一个同名的storeid,我们可以在view中直接使用这个storeid。以下是修改过的TreeMenu类:


Ext.define(‘demo.view.TreeMenu‘, {
extend: ‘Ext.tree.Panel‘,
alias: ‘widget.treemenu‘,

title: ‘系统菜单‘,
margins: 5,

initComponent: function() {
Ext.apply(this, {
store: ‘MenuStore‘,
rootVisible: false
});

this.callParent();
}
});

修改后,我们使用apply函数为treemenu类添加属性。这个过程是写在了initComponent函数中。initComponent函数是在定义子类时用作构造器使用。顾名思义,initComponent函数在类创建时被首先调用,并且会向上一直追溯到祖先类。因此在initComponent函数中必须有callParent的调用。

不过也有人是这样做的:


Ext.define(‘demo.view.TreeMenu‘, {
extend: ‘Ext.tree.Panel‘,
alias: ‘widget.treemenu‘,

title: ‘系统菜单‘,
margins: 5,
store: ‘MenuStore‘,
rootVisible: false
});

没有使用apply函数,显得比较简洁。这样子的做法我也试了一下,在家中测试没有成功,在公司测试成功了一次。觉得不是很稳定的一个做法。原因还没有深究,估计和js的运行顺序有关。建议还是用apply函数。在官方的实例中也是多使用apply函数。

好了,这次的目标只差临门一脚了。最后我们还要告诉app去找到controller,然后通过controller串起这个应用来,修改app.js:

Ext.application({
name: ‘demo‘,
controllers:[‘MenuController‘],
autoCreateViewport: true
});

然后看下目前系统的文件结构:

下图是运行结果:

时间: 2024-10-08 02:37:16

ExtJS MVC学习手记 2的相关文章

ExtJS MVC学习手册 1

开发环境: ExtJS4.2 eclipse indigo 开发步骤说明 这次主要使用extjs4的mvc模式创建viewport.籍此初步了解mvc模式的结构. 下图为项目结构: 重点是app的目录结构: 其中controller.model.store.view一般来说是必须存在的目录. app.js是应用的引导页.需要在首页中显式调用. 如下是index.jsp的代码: 1: <%@ page language="java" pageEncoding="utf-8

Linux.NET学习手记(8)

上一回合中,我们讲解了Linux.NET面对OWIN需要做出的准备,以及介绍了如何将两个支持OWIN协议的框架:SignalR以及NancyFX以OwinHost的方式部署到Linux.NET当中.这一章,我们将对框架与OwinHost之间怎么通过OWIN协议作出解析. 本章我们将讨论学习: (1).连接两世界之门——“Middleware“ (2).转动大门的钥匙,打开无尽的财宝 (3).适配器?转换插头 相关示例代码,可以点击这里进行下载. 1.充当”门“的”Middleware“ 英文名”

Spring MVC 学习笔记(二):@RequestMapping用法详解

一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置 <servlet>     <servlet-name>servletName</servlet-name>     <servlet-class>ServletClass</servlet-class> </servlet>

ASP.NET MVC学习系列(二)-WebAPI请求

继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现数据调用. 继续使用上一文章中的示例,添加一个index.html页面,添加对jquery的引用. 一.无参数Get请求 一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 来实现: 请求的后台Action方法仍为上篇文章中的GetU

MVC学习笔记索引帖

[MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现 [MVC学习笔记]2.使用T4模板生成其他类的具体实现 [MVC学习笔记]3.使用Spring.Net应用IOC(依赖倒置) [MVC学习笔记]4.使用Log4Net来进行错误日志的记录 [MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验) [MVC学习笔记]6. 使用Memcache+Cookie解决分布式系统共享登录状态 [MVC学习笔记]7.使用极验验证来制作更高逼格的验证码

ASP.NET MVC学习之控制器篇

一.前言 许久之后终于可以继续我的ASP.NET MVC连载了,之前我们全面的讲述了路由相关的知识,下面我们将开始控制器和动作的讲解. ASP.NET MVC学习之路由篇幅(1) ASP.NET MVC学习之路由篇幅(2) ASP.NET MVC学习之路由篇幅(3) 二.正文 1.IController的使用 这个接口可能很多人都没有使用过,但是我们常用的Controller类实现了这个接口,而且只要实现这个接口就可以作为一个控制器,当然很多的内部的处理就要我们自己去做了. 下面我利用ICont

Asp.Net MVC学习记录之“一个实体对象不能由多个 IEntityChangeTracker 实例引用”

原文:浅谈 js 正则之 test 方法 其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西.先来看个东西吧. ? 1 2 3 4 5 var re = /\d/; console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1"

前端MVC学习总结——AngularJS验证、过滤器

前端MVC学习总结--AngularJS验证.过滤器 目录 一.验证 二.过滤器 2.1.内置过滤器 2.1.1.在模板中使用过滤器 2.1.2.在脚本中调用过滤函数 2.2.自定义过滤器 三.指令(directive) 3.1.支持AngularJS功能的指令 3.1.1.应用与模块(ng-app) 3.1.2.控制器(ng-Controller) 3.1.3.包含(ng-Include) 3.1.4.不绑定(ngNonBindable) 3.2.扩展表单元素的指令 3.2.1.ng-opti

ASP.NET MVC学习之过滤器篇(2)

下面我们继续之前的ASP.NET MVC学习之过滤器篇(1)进行学习. 3.动作过滤器 顾名思义,这个过滤器就是在动作方法调用前与调用后响应的.我们可以在调用前更改实际调用的动作,也可以在动作调用完成之后更改最终返回的结果,当然很多人一定不太明白这个到底可以干什么, 下面我们举一个比较实际的例子: 相信理解过网站的安全的一定知道跨站请求(CSRF具体可以自行百度,这里我就不去解释了),当然也有解决方案,那就是给页面中增加一个识别码,当页面进行POST请求时,首先判断识别码是否正确, 如果正确则继