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(十)自定义模块的设计
从这一节开始我们来设计并完成一个自定义模块.我们先来确定一个独立的模块的所能定义的一些模块信息.以下信息只是我自己在开发过程中想到或用到的,希望有新的想法的或者有建议的跟贴回复. 一个独立模块包含以下 ...
随机推荐
- Jquery树控件ZTree异步加载
异步加载的意思就是: 当点击展开树节点时,才去请求后台action返回点击节点的子节点数据并加载. 这里面主要设计ztree的setting变量的async属性设置: var setting = { ...
- poi 合并单元格、设置边框
HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); //创建一个样式 HSSFCellStyle sty ...
- 后台运行之BackgroundWorker
BackgroundWorker 类允许您在单独的专用线程上运行操作. 耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态. 如果您需要能进行响应的用户界 ...
- UITabBarItem's appearance
1.我们知道,用tabBarController创建出来默认的tabBar似这个样子滴... -----------------我是图片分割线----------------------------- ...
- ALAssetsLibrary 照片相关 浅析
ALAssetsLibrary 提供了访问iOS设备下”照片”应用下所有照片和视频的接口: 从 ALAssetsLibrary 中可读取所有的相册数据,即 ALAssetsGroup 对象列表: 从每 ...
- CodeForces 689C Mike and Chocolate Thieves (二分最大化最小值)
题目并不难,就是比赛的时候没敢去二分,也算是一个告诫,应该敢于思考…… #include<stdio.h> #include<iostream> using namespace ...
- maven认识
在这里普及一下知识: ┣ maven与ant是同类,构建工具 ┣ svn与cvs,css是同类,版本控制工具 1.为什么要用Maven? 在进行软件开发的过程中,无论什么项目,采用何种技术,使用何种编 ...
- (转).net下Selenium2使用方法总结
一.Selenium简介 1.Selenium1(Selenium RC) Selenium2(Selenium WebDriver) Selenium2.0 = Selenium1.0 + W ...
- CodeForces 383D Antimatter
线性DP. dp[i][j]表示以第i个数字为结尾的,字串和为j的有几种. #include<cstdio> #include<cstring> #include<cma ...
- EF在单例模式及C/S方式开发时,操作数据对象以后如果发生异常,要做善后工作。
try{ 删除或修改 }catch { _DBContext.Refresh(RefreshMode.StoreWins, entity); }