14、手把手教你Extjs5(十四)模块字段和Grid列的定义[2]
model和columns生成好了,下面要修改一下Module.js和Grid.js中的代码,使其能够协同工作。
/**
* 一个模块的主控界面的容器,用来安放各个模块控件以及协调他们之间的关系
*/
Ext.define('app.view.module.Module', {
extend: 'Ext.panel.Panel', alias: 'widget.modulepanel', requires: ['app.view.module.ModuleController',
'app.view.module.ModuleModel', 'app.view.module.factory.ModelFactory'], uses: ['app.view.module.region.Navigate', 'app.view.module.region.Grid',
'app.view.module.region.Detail'], controller: 'module',
// MVVM架构的控制器的名称,main控制器会自动加载,这个控制器不会自动加载,需要在requires中指定,不知道是为什么
viewModel: {
type: 'module'
},
bind: {
// glyph : '{tf_glyph}', // 这一个绑定是无效的,在tabPanel渲染过后,再修改这个值,将不会有任何效果。
title: '{tf_title}' // 这个绑定是有效的,可以根据ModuleModel中的值来设置title
},
layout: 'border', // 模块采用border布局 initComponent: function () {
this.glyph = this.getViewModel().get('tf_glyph'); // 由于上面的glyph的bind无效,因此需要在这里加入glyph的设置
this.model = app.view.module.factory.ModelFactory.getModelByModule(this
.getViewModel()); console.log(this.model); this.store = Ext.create('Ext.data.Store', {
model: this.model,
autoLoad: true,
proxy: {
type: 'localstorage',
id: 'module' + '__' + this.getViewModel().get('tf_moduleName')
}
}) this.items = [{
xtype: 'navigate', // 导航区域
region: 'west',
width: 250,
collapsible: true,
split: true
}, {
xtype: 'modulegrid', // 模块的grid显示区域
region: 'center',
store: this.store
}, {
xtype: 'recorddetail', // 记录明细
region: 'east',
width: 250,
collapsible: true, // 可以折叠隐藏
collapseMode: 'mini', // 折叠陷藏模式
split: true
// 可以拖动大小
}] this.callParent();
} })
在Module.js中,根据modelFactory创建model,并且创建一个Store,使用了自动生成的model,由于现在还没有和后台建立关系,因此先把数据存在本地数据中。见下面的代码,type:'localstorage',就是使用本地存贮来存放数据。
this.store = Ext.create('Ext.data.Store', {
    model: this.model,
    autoLoad: true,
    proxy: {
        type: 'localstorage',
        id: 'module' + '__' + this.getViewModel().get('tf_moduleName')
    }
})
Grid.js中也修改:
/**
* 模块数据的主显示区域,继承自Grid
*/ Ext.define('app.view.module.region.Grid', {
extend: 'Ext.grid.Panel',
alias: 'widget.modulegrid',
uses: ['app.view.module.region.GridToolbar',
'app.view.module.factory.ColumnsFactory'],
bind: {
title: '{tf_title}' // 数据绑定到ModuleModel中的tf_title
},
dockedItems: [{
xtype: 'gridtoolbar', // 按钮toolbar
dock: 'top'
}],
columnLines: true, // 加上表格线
viewConfig: {
stripeRows: true, // 奇偶行不同底色
enableTextSelection: true
},
initComponent: function () {
var viewModel = this.up('modulepanel').getViewModel();
// 创建grid列
this.columns = app.view.module.factory.ColumnsFactory.getColumns(
viewModel, 10);
this.callParent();
}
})
在Grid中加入columns 即可。经过以上步骤,可以展示界面了。

下面手动增加几条记录,给新增按钮增加一个事件执行,在GridToolbar的“新增“下面增加 handler :'addRecord',
/**
* 模块的控制器
*/ Ext.define('app.view.module.ModuleController', {
extend: 'Ext.app.ViewController', requires: ['Ext.MessageBox', 'Ext.window.Toast'], alias: 'controller.module', init: function () {
console.log('modulecontroller.init')
}, addRecord: function () {
var grid = this.getView().down('modulegrid');
var model = Ext.create(grid.getStore().model);
model.set('tf_id', 1);
model.set('tf_name', '太湖花园小区建设');
model.set('tf_code', '2004-01');
model.set('tf_squaremeter', 12000);
model.set('tf_budget', 3800000);
model.set('tf_rjl', 0.67);
model.set('tf_startDate', new Date());
model.set('tf_endDate', new Date());
model.set('tf_isValid', false);
model.set('tf_m3', 1239.24); grid.getStore().add(model);
console.log(model);
grid.getStore().sync();
} })
点击几下“新增“按钮,点入几条记录。

14、手把手教你Extjs5(十四)模块字段和Grid列的定义[2]的更多相关文章
- 13、手把手教你Extjs5(十三)模块字段和Grid列的定义[1]
		
这一节加入模块自定义字段,并根据这些字段生成model.然后再定义grid中的分组和列.从这一切开始真正进入到了模块自定义的节奏当中,代码的复杂度和技巧性也大大提高.先从模块字段的自定义开始.先看一下 ...
 - 手把手教你mysql(十)索引
		
手把手教你mysql(十)索引 一:索引的引入 索引定义:索引是由数据库表中一列或者多列组合而成,其作用是提高对表中数据的查询速度. 类似于图书的目录,方便快速定位,寻找指定的内容,如一本1000页的 ...
 - 22、手把手教你Extjs5(二十二)模块Form的自定义的设计[1]
		
下面开始设计和完成一个简单的Form的自定义过程.先准备数据,在ModuleModel.js中的data属性下面,加入自定义Form的参数定义,下面的代码中定义了一个新的属性tf_formScheme ...
 - 20、手把手教你Extjs5(二十)模块Grid的多列表方案
		
对于有很多字段的模块在一个grid中显示所有的字段,会显得很臃肿,对于不同的用户其侧重的字段类型也不尽相同,因此就有必要为Grid的列表设计多个方案.在这个自定义系统进行设计的时候,我已经将这部分内容 ...
 - 19、手把手教你Extjs5(十九)模块Grid的其他功能的设想
		
经过对自定义模块和Grid的设计和编码,现在已经能对一个有配置信息的模块来生成界面并进行一些简单的CURD操作.由于这是一个全解释性的前台的架构,因此你想到的任何新主意都可以放到所有的模块中. 比如对 ...
 - 24、手把手教你Extjs5(二十四)模块Form的自定义的设计[3]
		
自定义的Form已经可以运行了,下面改一下配置,把Form里面的FieldSet放在Tab之下.修改一下ModuleModel.js中的data下的tf_FormSchemes下的方案,增加一个属性. ...
 - 18、手把手教你Extjs5(十八)模块记录的拖放删除、拖放复制新增
		
网页当中的拖放(drag-drop)是比较有趣的操作,extjs5中很好的封装了拖放的动作,也有各种类来支持,但是要学好“拖放”这个东西真是很难,特别是象我这样英语不好的人,看不太懂官网上的说明,做一 ...
 - 12、手把手教你Extjs5(十二)执行菜单命令在tabPanel中显示模块
		
上面设计好了一个模块的主界面,下面通过菜单命令的执行来把这个模块加入到主界面当中.在MainModule.js中有一个函数,生成了当前的菜单数据: // 根据data.systemMenu生成菜单条和 ...
 - 10、手把手教你Extjs5(十)自定义模块的设计
		
从这一节开始我们来设计并完成一个自定义模块.我们先来确定一个独立的模块的所能定义的一些模块信息.以下信息只是我自己在开发过程中想到或用到的,希望有新的想法的或者有建议的跟贴回复. 一个独立模块包含以下 ...
 
随机推荐
- HDU 5234  Happy birthday 动态规划(三维数组)
			
题目大意:过生日,有一个N*M的表格,每个位置都有一块一定重量的蛋糕你可以选择吃完或者不吃,从(1,1)走到(n,m),每次只能向右走或向下走,最多能吃k重量的蛋糕.问你最多能吃多少蛋糕. 题目思路: ...
 - apache php  配置 CI 框架
			
声明:配置域名需要用到 httpd.conf httpd_vhosts.conf (apache) 中两个文件 和 hosts (C:\Windows\System32\drivers\et ...
 - List、Set、Map集合存放null解析及HashMap、Hashtable异同点解析
			
1.List.Set.Map集合存放null解析: @Test public void CollectionTest() { // 测试List List<Object> list = n ...
 - Element type "bean" must be followed by either attribute specifications, ">" or "/>".
			
在这里其他内容就省了,错在,<bean id="bpcsU1gblDAO"class="dao.jk.bpcs.impl.BpcsU1gblDaoImpl" ...
 - struts2中的<s:select>默认选项
			
//... public class SelectAction extends ActionSupport{ private List<String> searchEngine; priv ...
 - Node.js学习 - RESTFul API
			
REST Representational State Transfer (表述性状态转移), 是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是RESTful. RESTful W ...
 - C++:new 和  delete
			
在 C++ 中 , 使用 new 操作符动态申请内存的时候,如果申请失败,则会抛出 bad_alloc异常 当使用 delete 释放一块内存的时候 , 有些编译器上delete 不能判断一块内存 ...
 - HDU 3265 Posters ——(线段树+扫描线)
			
第一次做扫描线,然后使我对线段树的理解发生了动摇= =..这个pushup写的有点神奇.代码如下: #include <stdio.h> #include <algorithm> ...
 - springMVC如何访问静态文件
			
在进行Spring MVC的配置时,通常我们会配置一个dispatcher servlet用于处理对应的URL.配置如下:<servlet><servlet-name>mvc- ...
 - Servlet程序开发-- 取得其他内置对象
			
servlet本身提供的只有request和response对象,如果要取得session对象,只能依靠request对象,因为session属于HTTP协议范畴,而且在每次发送请求的时候,服务器都会 ...