[Ext JS 4] 实战之Grid, Tree Gird编辑Cell
前言
本篇这里以稍微复杂一点的Tree Grid 来介绍.
在写编辑grid 之, 先来看一下 grid 的 selType 的配置。
先给一个简单的Tree grid 的例子:
Ext.onReady(function(){
var treeStore = Ext.create('Ext.data.TreeStore', {
fields: ['id','name','sex','age'],
root:{
"children":[{id:'001',name:'shu',sex:'',age:'',expanded: true,
"children": [{id:'001_1',name:'liu.bei',sex:'male',age:'50'},
{id:'001_2',name:'guan.yu',sex:'male',age:'49'},
{id:'001_3',name:'zhang.fei',sex:'male',age:'48'}]
}]
}
});
var gridCols = [{xtype: 'treecolumn',text:'ID',dataIndex:'id'},
{text:'Name',dataIndex:'name'},
{text:'Sex',dataIndex:'sex'},
{text:'Age',dataIndex:'age'}]; var treeGrid = Ext.create('Ext.tree.Panel',{
title: 'Three KingDom',
rootVisible: false,
collapsible: true,
store: treeStore,
columns: gridCols,
renderTo: Ext.getBody()
});
});
默认情况下, 点击的时候是整行选取。
可以通过配置selType 进行配置, setType 配置的是 Ext.selection包下的Select Model 的 xtype.
可以配置:
1. rowmodel. 行选取, 默认的方式, 如果没有设置selType的话使用这个。
2. cellmodel。 单元格选取。
3. checkboxmodel。 checkbox 选取, 配置这个的话,会在grid 前加一列 check box 列
4. treemodel。
Cell 编辑模式
好了, 进入正题。对grid 进行编辑。
要对grid 进行编辑,需要以下两个步骤:
1. 给grid 添加edit 的 plugin
var cellEditPlugin = Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1
});
var treeGrid = Ext.create('Ext.tree.Panel',{
title: 'Three KingDom',
rootVisible: false,
collapsible: true,
store: treeStore,
columns: gridCols,
plugins: [cellEditPlugin],
renderTo: Ext.getBody()
});
clicksToEdit : 1 是单击, 2 是双击
2. columns 中需要编辑的列添加 editor
{text:'Name',dataIndex:'name',editor:{xtype:'textfield'}},
xtype 是编辑状态的组件, 是简单文本框,还是下拉单,或是其他的
Row 编辑模式
有了以上 cell 模式, Row 模式就简单了。
只是plugin 换成RowEditing 就可以了
var rowEditPlugin = Ext.create('Ext.grid.plugin.RowEditing', {
clicksToEdit: 2
})
而且这两种方式是可以并存的, 全部添加到grid 的plugins 的配置中就可以了。
全部编辑
不管是在row 或是cell的编辑模式下, 一次只能操作一行或一个单元格。
要编辑下一个, 当前的这个就会回到非编辑状态。
也就是, 看起来,只构造了一个editor 的组件, 大家轮着使用。
可是问题是, 如果有eidt all 这个按钮的话,点击之后, 所有可编辑的cell 全部置为编辑状态,使用现有的配置目前就无法达到了。
在 Ext 3 之前的版本, Ext js 的开发者有开发一个插件解决这个问题:
http://www.sencha.com/forum/showthread.php?79232-EditableGrid-Shows-editors-for-all-cells
但是,也特别提出了,如果grid 的数据量很大的话, 这种方式的性能就不行了。
想想也是, 每个edit栏位都会新建一个复杂的组件, 性能肯定会受影响。
问题到这并没有解决, 那个插件只是在Ext 3 (或者以下)可以使用, 目前Ext 已经是 4 版本了。
Extjs 4 中并没有直接解决方法, 升级那个插件应该也挺费时的。
另外一种解法是在 配置col 的 render :
renderer:function(value, metadata,record){}
在列显示之前, 把value 替换成<input >这种输入框。 看上去不错。
但是如果需要的是commobox 的话呢,
1. renderer 只能返回字符串, 不能返回组件
2. field 组件本身也没有直接转成html 的方法。
3 自行组成 Ext js 的 commobox 的html 看上去也挺麻烦。
不过思路上还是要朝这个方向前进。 幸运的是已经有人把这个扩展完成了(在ext js 4之上)
http://skirtlesden.com/ux/component-column
使用方式很简单, 现在两个js 文件
1.ctemplate.js
http://skirtlesden.com/ux/ctemplate
2. component.js
http://skirtlesden.com/ux/component-column
导入后, 如下方式定义 col
{
...
dataIndex: 'status',
xtype: 'componentcolumn', renderer: function(status) {
return {
...
store: ['Available', 'Away', 'Busy', 'Offline'],
value: status,
xtype: 'combobox'
};
}
}
[Ext JS 4] 实战之Grid, Tree Gird编辑Cell的更多相关文章
- [Ext JS 4] 实战之Grid, Tree Gird 添加按钮列
引言 贴一个grid 的例子先: 有这样一个需求: 1. 给 Grid(or Tree Grid)添加一列, 这一列显示是Button. 点击之后可以对这一行进行一些操作 2. 这一列每一行对应的按钮 ...
- Ext JS treegrid 发生的在tree上增加itemclick 与在其它列上增加actioncolumn 发生事件冲突(event conflict)的解决办法
Ext JS treegrid 发生的在tree上增加itemclick 与在其它列上增加actioncolumn 发生事件冲突(event conflict)的解决办法 最近在适用Ext JS4开发 ...
- [Ext JS 4] 实战之 带week(星期)的日期选择控件(三)
前言 在 [Ext JS 4] 实战之 带week(星期)的日期选择控件(二) 的最后,有提到一个解决方案. 不过这方案有一个条件 ==> “2. 每年的周数从(1-52), 如果超过52 周 ...
- [Ext JS 4] 实战之 Picker 和 Picker Field
前言 所谓的picker , 就是弹出一个选择框,让你选择一些信息.比如选择日期, 选择颜色等: 选择的结果总是要放在一个地方的,Picker Field 就是用来放置选择结果的一个文本框. 在Ext ...
- [Ext JS 4] 实战之 带week(星期)的日期选择控件
前言 Ext JS 3 和 Ext JS 4中都有提供日期选择的组件(当然早期版本也有). 但是有一些日期选择的需求是要看到星期,就是日期中的哪一天是这一年的第几周. 遗憾的是Ext js 并没有提供 ...
- [Ext JS 4] 实战之多选下拉单 (带checkbox)
前言 Ext js 创建一个多选下拉单的方式很简单, 使用Ext.form.ComboBox, 设置 multiSelect 为true 就可以了. 但是如果要在每个下拉之前加上一个checkbox, ...
- [Ext JS 4] 实战Chart 协调控制(单一的坐标,两个坐标)
前言
- 24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
转自:https://blog.csdn.net/oscar999/article/details/27176791
- 【LigerUI实战】Grid弹出编辑popup
最近为分公司的项目做外援,做起了全栈的活.被公司自研架构磨灭的几乎忘掉了其他技能,正好新项目决定重新搭个架构,与同事们讨论过后,决定Spring+MyBatis+SpringMVC+CXF+Liger ...
随机推荐
- debian 源
把下面的源覆盖在/etc/apt/sources.list deb http://http.debian.net/debian wheezy main deb-src http://http.debi ...
- RMAN-configure命令
在Oracle 10g中的配置情况 使用RMAN>show all; 可以显示出RMAN 配置参数为: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # ...
- VB6.0连接MySQL数据库
VB6.0连接MySQL数据库
- 一张图解析如何让img垂直居中对齐
测试代码: <!DOCTYPE html> <html> <head> <style> .dd { background-color: gray; po ...
- 报错要跟到底就很更快更准确的发现问题所在一直in进去(其实都知道的哈)
问题-查看详细信息-innerexception-innerexception
- T4文本模板
<#...#> 可以包含语句 <#=...#> 用于表达式,提供“输出”操作 <#+ ...> 使用类功能控制块向文本模板添加方法.属性.字段,必须作为文件中最后 ...
- OkHttp 上手
OkHttp 上手 优点 快.节省带宽. 支持 HTTP/2 和 SPDY. HTTP/2 和 SPDY 允许对同一个主机的所有请求,使用一个 socket. 如果不支持 SPDY 的话,可以用连接池 ...
- POJ1459 最大网络流
问题: POJ1459 涉及内容:最大网络流 分析: 本题问题看似非常复杂,实际上可以转化为单源点单汇点的最大网络流问题. 1)因为电量只在发电站产生,故增加源点S,构建从S到每个发电站的有向边,边的 ...
- 在树莓派上安装leanote
作者:冥王星 "noright0@163.com" 前言 宿舍有个树莓派2B,连接到电视机,安装OSMC系统,USB接口连接移动硬盘一块,平时用来BT下载和看电影.美剧. OSMC ...
- 从ASM迁移到ARM(1):平台支持的迁移服务
Azure上的ARM模式为用户带来更好的管理,更多新的特性,更好的体验,因此目前正在使用经典模式(ASM)的用户,在了解和使用了ARM之后,也在考虑如何将原来基于ASM模式的虚拟机,存储,网络等IAA ...