- 浏览: 655672 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (609)
- java (139)
- 数据库 (107)
- 微信 (23)
- IT生活 (5)
- web前端 (74)
- SSH (11)
- 设计模式 (12)
- 重要资料 (11)
- 其他 (15)
- java技巧 (23)
- 服务器 (9)
- 2D/GUI (3)
- JAVA3D (2)
- ANT (5)
- Apache项目 (19)
- 数据类型 (10)
- 报表 (3)
- Collections (6)
- SQL/JDBC (15)
- 开发类 (6)
- EJB (6)
- Email (6)
- 文件读写 (2)
- 游戏 (0)
- Flex (2)
- Generic (2)
- HIbernate (12)
- I18N (5)
- Java EE (9)
- java ME (4)
- JDK 6 (8)
- JNDI/LDAP (5)
- JSP (7)
- JSTL (2)
- 正则表达式 (2)
- 安全 (2)
- Struts2 (12)
- Spring (4)
- Web服务 (10)
- Xml (1)
- JavaScript (30)
- AJAX (7)
- 验证 (4)
- 上传下载 (1)
- office办公软件 (1)
- Android (2)
- IOS (0)
- Dubbo (3)
- memcached/redis (1)
- 小程序 (1)
- 微信公众号 (0)
最新评论
-
wf_wangfeng:
怎么我用第一种方法不行呢 alert(document.rea ...
当jsp页面完全加载完成后执行一个js函数 -
Lori_Liu:
有帮助,至少可以解决了目前所遇到的问题!谢谢..
当jsp页面完全加载完成后执行一个js函数 -
starbhhc:
String actionMessage = new Stri ...
Java读取txt文件乱码 -
starbhhc:
Sev7en_jun 写道GOOD
客气,互相交流。。
javaeye论坛规则小测验(答案)--star -
Sev7en_jun:
GOOD
javaeye论坛规则小测验(答案)--star
extjs学习笔记(五)可编辑的grid作者:大笨 来源:博客园 发布时间:2009-10-22 01:46 阅读:2487 次 原文链接 [收藏]
大多数时候,我们只是使用grid来显示信息,但有时也需要在grid中对信息进行编辑。在extjs中,构造一个可编辑的grid非常方便。
我们来看下Ext.grid.EditorGridPanel,该类从GridPanel继承而来,通过对列提供editor进行编辑。在前边的例子中,我们用过renderer函数,知道可以把数据显示成我们希望的样子,而在编辑的时候,我们其实是针对的原始数据。另外,我们在编辑的时候,通常希望能够对用户的输入进行控制而不是任由用户随心所欲的输入,Ext.form命名空间有一些类能够对用户输入进行一些基本的控制,我们会在下边的代码中看到,这里我再次强调一下,在向服务器提交数据之前和数据在服务器进行处理之前,必须要进行数据的有效性验证。由于对grid已经比较熟悉了,下边就直接给出代码了:
1///<reference path="vswd-ext_2.0.2.js" />
2/**//*
3*作者:大笨
4*日期:2009-10-20
5*版本:1.0
6*博客地址:http://yage.cnblogs.com
7*QQ:14202190
8*/
9Ext.BLANK_IMAGE_URL = '../extjs/resources/images/default/s.gif';
10
11Ext.onReady(function() {
12 Ext.QuickTips.init();
13
14 //格式化日期
15 function formatDate(value) {
16 return value ? value.dateFormat('Y年m月d日') : '';
17 }
18
19 // 别名
20 var fm = Ext.form;
21
22 //构造一个只能包含checkbox的列
23 var checkColumn = new Ext.grid.CheckColumn({
24 header: 'Indoor?',
25 dataIndex: 'indoor',
26 width: 55
27 });
28
29 // 构造ColumnModel
30 var cm = new Ext.grid.ColumnModel({
31 columns: [{
32 id: 'common',
33 header: 'Common Name',
34 dataIndex: 'common',
35 width: 220,
36 // 使用上边定义好的别名
37 editor: new fm.TextField({
38 allowBlank: false
39 })
40 }, {
41 header: 'Light',
42 dataIndex: 'light',
43 width: 130,
44 editor: new fm.ComboBox({
45 typeAhead: true,
46 triggerAction: 'all',
47 transform: 'light',
48 lazyRender: true,
49 listClass: 'x-combo-list-small'
50 })
51 }, {
52 header: 'Price',
53 dataIndex: 'price',
54 width: 70,
55 align: 'right',
56 renderer: 'usMoney',
57 editor: new fm.NumberField({
58 allowBlank: false,
59 allowNegative: false,
60 maxValue: 100000
61 })
62 }, {
63 header: 'Available',
64 dataIndex: 'availDate',
65 width: 95,
66 renderer: formatDate,
67 editor: new fm.DateField({
68 format: 'Y年m月d日',
69 minValue: '01/01/06',
70 disabledDays: [0, 6],
71 disabledDaysText: 'Plants are not available on the weekends'
72 })
73 },
74 checkColumn,
75 ],
76 defaults: {
77 sortable:true
78 }
79});
80
81
82// 构造一个Store对象
83var store = new Ext.data.Store({
84
85 url: 'plants.xml',
86
87 reader: new Ext.data.XmlReader(
88 {
89 record: 'plant'
90 },
91
92 [
93 { name: 'common', type: 'string' },
94 { name: 'botanical', type: 'string' },
95 { name: 'light' },
96 { name: 'price', type: 'float' },
97 { name: 'availDate', mapping: 'availability', type: 'date', dateFormat: 'm/d/Y' },
98 { name: 'indoor', type: 'bool' }
99 ]
100 ),
101
102 sortInfo: { field: 'common', direction: 'ASC' }
103});
104
105// 构造可编辑的grid
106var grid = new Ext.grid.EditorGridPanel({
107 store: store,
108 cm: cm,
109 renderTo: 'grid',
110 width: 600,
111 height: 300,
112 autoExpandColumn: 'common',
113 title: 'Edit Plants?',
114 frame: true,
115 plugins: checkColumn,
116 clicksToEdit: 1
117});
118
119// 触发数据的加载
120store.load();
121});
我们在前边的系列中使用过数据和json来作为数据保存或者传递的格式,考虑到xml也很常用,这次我们使用了xml文件,内容如下:
plants.xml<?xml version="1.0" encoding="utf-8"?>
2<catalog>
3 <plant>
4 <common>Bloodroot</common>
5 <botanical>Sanguinaria canadensis</botanical>
6 <zone>4</zone>
7 <light>Mostly Shady</light>
8 <price>2.44</price>
9 <availability>03/15/2006</availability>
10 <indoor>true</indoor>
11 </plant>
12 <plant>
13 <common>Columbine</common>
14 <botanical>Aquilegia canadensis</botanical>
15 <zone>3</zone>
16 <light>Mostly Shady</light>
17 <price>9.37</price>
18 <availability>03/06/2006</availability>
19 <indoor>true</indoor>
20 </plant>
21 <plant>
22 <common>Marsh Marigold</common>
23 <botanical>Caltha palustris</botanical>
24 <zone>4</zone>
25 <light>Mostly Sunny</light>
26 <price>6.81</price>
27 <availability>05/17/2006</availability>
28 <indoor>false</indoor>
29 </plant>
30 <plant>
31 <common>Cowslip</common>
32 <botanical>Caltha palustris</botanical>
33 <zone>4</zone>
34 <light>Mostly Shady</light>
35 <price>9.90</price>
36 <availability>03/06/2006</availability>
37 <indoor>true</indoor>
38 </plant>
39 <plant>
40 <common>Dutchman's-Breeches</common>
41 <botanical>Dicentra cucullaria</botanical>
42 <zone>3</zone>
43 <light>Mostly Shady</light>
44 <price>6.44</price>
45 <availability>01/20/2006</availability>
46 <indoor>true</indoor>
47 </plant>
48 <plant>
49 <common>Ginger, Wild</common>
50 <botanical>Asarum canadense</botanical>
51 <zone>3</zone>
52 <light>Mostly Shady</light>
53 <price>9.03</price>
54 <availability>04/18/2006</availability>
55 <indoor>true</indoor>
56 </plant>
57 <plant>
58 <common>Hepatica</common>
59 <botanical>Hepatica americana</botanical>
60 <zone>4</zone>
61 <light>Mostly Shady</light>
62 <price>4.45</price>
63 <availability>01/26/2006</availability>
64 <indoor>true</indoor>
65 </plant>
66 <plant>
67 <common>Liverleaf</common>
68 <botanical>Hepatica americana</botanical>
69 <zone>4</zone>
70 <light>Mostly Shady</light>
71 <price>3.99</price>
72 <availability>01/02/2006</availability>
73 <indoor>true</indoor>
74 </plant>
75 <plant>
76 <common>Jack-In-The-Pulpit</common>
77 <botanical>Arisaema triphyllum</botanical>
78 <zone>4</zone>
79 <light>Mostly Shady</light>
80 <price>3.23</price>
81 <availability>02/01/2006</availability>
82 <indoor>true</indoor>
83 </plant>
84 <plant>
85 <common>Mayapple</common>
86 <botanical>Podophyllum peltatum</botanical>
87 <zone>3</zone>
88 <light>Mostly Shady</light>
89 <price>2.98</price>
90 <availability>06/05/2006</availability>
91 <indoor>true</indoor>
92 </plant>
93 <plant>
94 <common>Phlox, Woodland</common>
95 <botanical>Phlox divaricata</botanical>
96 <zone>3</zone>
97 <light>Sun or Shade</light>
98 <price>2.80</price>
99 <availability>01/22/2006</availability>
100 <indoor>false</indoor>
101 </plant>
102 <plant>
103 <common>Phlox, Blue</common>
104 <botanical>Phlox divaricata</botanical>
105 <zone>3</zone>
106 <light>Sun or Shade</light>
107 <price>5.59</price>
108 <availability>02/16/2006</availability>
109 <indoor>false</indoor>
110 </plant>
111 <plant>
112 <common>Spring-Beauty</common>
113 <botanical>Claytonia Virginica</botanical>
114 <zone>7</zone>
115 <light>Mostly Shady</light>
116 <price>6.59</price>
117 <availability>02/01/2006</availability>
118 <indoor>true</indoor>
119 </plant>
120 <plant>
121 <common>Trillium</common>
122 <botanical>Trillium grandiflorum</botanical>
123 <zone>5</zone>
124 <light>Sun or Shade</light>
125 <price>3.90</price>
126 <availability>04/29/2006</availability>
127 <indoor>false</indoor>
128 </plant>
129 <plant>
130 <common>Wake Robin</common>
131 <botanical>Trillium grandiflorum</botanical>
132 <zone>5</zone>
133 <light>Sun or Shade</light>
134 <price>3.20</price>
135 <availability>02/21/2006</availability>
136 <indoor>false</indoor>
137 </plant>
138 <plant>
139 <common>Violet, Dog-Tooth</common>
140 <botanical>Erythronium americanum</botanical>
141 <zone>4</zone>
142 <light>Shade</light>
143 <price>9.04</price>
144 <availability>02/01/2006</availability>
145 <indoor>true</indoor>
146 </plant>
147 <plant>
148 <common>Trout Lily</common>
149 <botanical>Erythronium americanum</botanical>
150 <zone>4</zone>
151 <light>Shade</light>
152 <price>6.94</price>
153 <availability>03/24/2006</availability>
154 <indoor>true</indoor>
155 </plant>
156 <plant>
157 <common>Adder's-Tongue</common>
158 <botanical>Erythronium americanum</botanical>
159 <zone>4</zone>
160 <light>Shade</light>
161 <price>9.58</price>
162 <availability>04/13/2006</availability>
163 <indoor>true</indoor>
164 </plant>
165 <plant>
166 <common>Anemone</common>
167 <botanical>Anemone blanda</botanical>
168 <zone>6</zone>
169 <light>Mostly Shady</light>
170 <price>8.86</price>
171 <availability>12/26/2006</availability>
172 <indoor>true</indoor>
173 </plant>
174 <plant>
175 <common>Grecian Windflower</common>
176 <botanical>Anemone blanda</botanical>
177 <zone>6</zone>
178 <light>Mostly Shady</light>
179 <price>9.16</price>
180 <availability>07/10/2006</availability>
181 <indoor>true</indoor>
182 </plant>
183 <plant>
184 <common>Bee Balm</common>
185 <botanical>Monarda didyma</botanical>
186 <zone>4</zone>
187 <light>Shade</light>
188 <price>4.59</price>
189 <availability>05/03/2006</availability>
190 <indoor>true</indoor>
191 </plant>
192 <plant>
193 <common>Bergamot</common>
194 <botanical>Monarda didyma</botanical>
195 <zone>4</zone>
196 <light>Shade</light>
197 <price>7.16</price>
198 <availability>04/27/2006</availability>
199 <indoor>true</indoor>
200 </plant>
201 <plant>
202 <common>Black-Eyed Susan</common>
203 <botanical>Rudbeckia hirta</botanical>
204 <zone>Annual</zone>
205 <light>Sunny</light>
206 <price>9.80</price>
207 <availability>06/18/2006</availability>
208 <indoor>false</indoor>
209 </plant>
210 <plant>
211 <common>Buttercup</common>
212 <botanical>Ranunculus</botanical>
213 <zone>4</zone>
214 <light>Shade</light>
215 <price>2.57</price>
216 <availability>06/10/2006</availability>
217 <indoor>true</indoor>
218 </plant>
219 <plant>
220 <common>Crowfoot</common>
221 <botanical>Ranunculus</botanical>
222 <zone>4</zone>
223 <light>Shade</light>
224 <price>9.34</price>
225 <availability>04/03/2006</availability>
226 <indoor>true</indoor>
227 </plant>
228 <plant>
229 <common>Butterfly Weed</common>
230 <botanical>Asclepias tuberosa</botanical>
231 <zone>Annual</zone>
232 <light>Sunny</light>
233 <price>2.78</price>
234 <availability>06/30/2006</availability>
235 <indoor>false</indoor>
236 </plant>
237 <plant>
238 <common>Cinquefoil</common>
239 <botanical>Potentilla</botanical>
240 <zone>Annual</zone>
241 <light>Shade</light>
242 <price>7.06</price>
243 <availability>05/25/2006</availability>
244 <indoor>true</indoor>
245 </plant>
246 <plant>
247 <common>Primrose</common>
248 <botanical>Oenothera</botanical>
249 <zone>3 - 5</zone>
250 <light>Sunny</light>
251 <price>6.56</price>
252 <availability>01/30/2006</availability>
253 <indoor>false</indoor>
254 </plant>
255 <plant>
256 <common>Gentian</common>
257 <botanical>Gentiana</botanical>
258 <zone>4</zone>
259 <light>Sun or Shade</light>
260 <price>7.81</price>
261 <availability>05/18/2006</availability>
262 <indoor>false</indoor>
263 </plant>
264 <plant>
265 <common>Blue Gentian</common>
266 <botanical>Gentiana</botanical>
267 <zone>4</zone>
268 <light>Sun or Shade</light>
269 <price>8.56</price>
270 <availability>05/02/2006</availability>
271 <indoor>false</indoor>
272 </plant>
273 <plant>
274 <common>Jacob's Ladder</common>
275 <botanical>Polemonium caeruleum</botanical>
276 <zone>Annual</zone>
277 <light>Shade</light>
278 <price>9.26</price>
279 <availability>02/21/2006</availability>
280 <indoor>true</indoor>
281 </plant>
282 <plant>
283 <common>Greek Valerian</common>
284 <botanical>Polemonium caeruleum</botanical>
285 <zone>Annual</zone>
286 <light>Shade</light>
287 <price>4.36</price>
288 <availability>07/14/2006</availability>
289 <indoor>true</indoor>
290 </plant>
291 <plant>
292 <common>California Poppy</common>
293 <botanical>Eschscholzia californica</botanical>
294 <zone>Annual</zone>
295 <light>Sunny</light>
296 <price>7.89</price>
297 <availability>03/27/2006</availability>
298 <indoor>false</indoor>
299 </plant>
300 <plant>
301 <common>Shooting Star</common>
302 <botanical>Dodecatheon</botanical>
303 <zone>Annual</zone>
304 <light>Mostly Shady</light>
305 <price>8.60</price>
306 <availability>05/13/2006</availability>
307 <indoor>true</indoor>
308 </plant>
309 <plant>
310 <common>Snakeroot</common>
311 <botanical>Cimicifuga</botanical>
312 <zone>Annual</zone>
313 <light>Shade</light>
314 <price>5.63</price>
315 <availability>07/11/2006</availability>
316 <indoor>true</indoor>
317 </plant>
318 <plant>
319 <common>Cardinal Flower</common>
320 <botanical>Lobelia cardinalis</botanical>
321 <zone>2</zone>
322 <light>Shade</light>
323 <price>3.02</price>
324 <availability>02/22/2006</availability>
325 <indoor>true</indoor>
326 </plant>
327</catalog>
我们先来体验下效果:
我们注意到被编辑过的单元格左上角有个红色的小箭头,并且第一列是不允许为空的,第二列可以从下拉列表来选择,第三列在编辑状态显示的是原始数据,第四列可以从一个日期控件中来选择日期。现在我们来看一下主要的代码:
第12行,和本次的主题无关,只是初始化一个全局QuickTips对象,该对象为元素提供漂亮和可定制的提示工具(tooltips)。
第15-17行,是列的renderer函数, 在下边构造ColumnModel的时候会用到。
第20行,取了个别名,下文中需要使用Ext.form的地方,就可以简单的使用fm来代替了。
第23-27行,使用CheckColumn类构造了一个显示checkbox的列, 该类在一个单独的js文中定义。我们也可以使用renderer函数很方便的做到这一点,但是有现成的没有理由不用。
第30-79行,构造了ColumnModel类的对象,我们在其中使用了editor来提供编辑的功能。editor其实是Ext.form.Field类或者其子类的一个对象,我们会在学习表单的时候再详细介绍Ext.form命名空间中的类。这里我们只需要注意在构造Ext.form.ComboBox对象的时候,需要在页面上有一个HTML的SELECT元素,配置参数transform需要这个SELECT元素。
第83-103行构造grid需要的Store对象,现在我们只要能够对照plant.xml文件大概看明白就可以了 。
第106-117就是我们想要的可编辑的grid了,大部分参数我们都用过,这里简单介绍下最后三个参数:
frame:Boolean类型的值,默认为false,呈现出普通的1个象素的方形边框;为true的时候可以是定制的圆弧形转角(custom rounded corners )。有兴趣的朋友可以用firebug观察一下不同值的时候生成的html代码。
plugins:为grid组件提供自定义功能的插件,只有在插件的init方法需要grid组件的引用作为参数的时候才需要。
clicksToEdit:变为可编辑状态需要点击鼠标的次数,默认值是2。
下边给出我们的页面文件:
edit-grid.htm
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<head>
4 <title>可以编辑的grid</title>
5 <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" />
6
7 <script type="text/javascript" src="extjs/ext-base-debug.js"></script>
8
9 <script type="text/javascript" src="extjs/ext-all-debug.js"></script>
10
11 <script type="text/javascript" src="extjs/ext-lang-zh_CN.js"></script>
12 <script type="text/javascript" src="extjs/CheckColumn.js"></script>
13
14 <script type="text/javascript" src="js/edit-grid.js"></script>
15
16</head>
17<body>
18<select name="light" id="light" style="display: none;">
19 <option value="Shade">Shade</option>
20 <option value="Mostly Shady">Mostly Shady</option>
21 <option value="Sun or Shade">Sun or Shade</option>
22 <option value="Mostly Sunny">Mostly Sunny</option>
23 <option value="Sunny">Sunny</option>
24 </select>
25 <div id="grid">
26 </div>
27</body>
28</html>
29
需要注意的是,当我们对grid中的数据编辑之后并未保存,所以页面一旦刷新,我们的改动便会丢失。另外,我们也并未对数据进行有效性验证,只是由列的editor提供了最基本的验证,比如数据不能为空。我们会在下一个系列对grid进行增加和删除操作中学习到如何解决这些问题。
大多数时候,我们只是使用grid来显示信息,但有时也需要在grid中对信息进行编辑。在extjs中,构造一个可编辑的grid非常方便。
我们来看下Ext.grid.EditorGridPanel,该类从GridPanel继承而来,通过对列提供editor进行编辑。在前边的例子中,我们用过renderer函数,知道可以把数据显示成我们希望的样子,而在编辑的时候,我们其实是针对的原始数据。另外,我们在编辑的时候,通常希望能够对用户的输入进行控制而不是任由用户随心所欲的输入,Ext.form命名空间有一些类能够对用户输入进行一些基本的控制,我们会在下边的代码中看到,这里我再次强调一下,在向服务器提交数据之前和数据在服务器进行处理之前,必须要进行数据的有效性验证。由于对grid已经比较熟悉了,下边就直接给出代码了:
1///<reference path="vswd-ext_2.0.2.js" />
2/**//*
3*作者:大笨
4*日期:2009-10-20
5*版本:1.0
6*博客地址:http://yage.cnblogs.com
7*QQ:14202190
8*/
9Ext.BLANK_IMAGE_URL = '../extjs/resources/images/default/s.gif';
10
11Ext.onReady(function() {
12 Ext.QuickTips.init();
13
14 //格式化日期
15 function formatDate(value) {
16 return value ? value.dateFormat('Y年m月d日') : '';
17 }
18
19 // 别名
20 var fm = Ext.form;
21
22 //构造一个只能包含checkbox的列
23 var checkColumn = new Ext.grid.CheckColumn({
24 header: 'Indoor?',
25 dataIndex: 'indoor',
26 width: 55
27 });
28
29 // 构造ColumnModel
30 var cm = new Ext.grid.ColumnModel({
31 columns: [{
32 id: 'common',
33 header: 'Common Name',
34 dataIndex: 'common',
35 width: 220,
36 // 使用上边定义好的别名
37 editor: new fm.TextField({
38 allowBlank: false
39 })
40 }, {
41 header: 'Light',
42 dataIndex: 'light',
43 width: 130,
44 editor: new fm.ComboBox({
45 typeAhead: true,
46 triggerAction: 'all',
47 transform: 'light',
48 lazyRender: true,
49 listClass: 'x-combo-list-small'
50 })
51 }, {
52 header: 'Price',
53 dataIndex: 'price',
54 width: 70,
55 align: 'right',
56 renderer: 'usMoney',
57 editor: new fm.NumberField({
58 allowBlank: false,
59 allowNegative: false,
60 maxValue: 100000
61 })
62 }, {
63 header: 'Available',
64 dataIndex: 'availDate',
65 width: 95,
66 renderer: formatDate,
67 editor: new fm.DateField({
68 format: 'Y年m月d日',
69 minValue: '01/01/06',
70 disabledDays: [0, 6],
71 disabledDaysText: 'Plants are not available on the weekends'
72 })
73 },
74 checkColumn,
75 ],
76 defaults: {
77 sortable:true
78 }
79});
80
81
82// 构造一个Store对象
83var store = new Ext.data.Store({
84
85 url: 'plants.xml',
86
87 reader: new Ext.data.XmlReader(
88 {
89 record: 'plant'
90 },
91
92 [
93 { name: 'common', type: 'string' },
94 { name: 'botanical', type: 'string' },
95 { name: 'light' },
96 { name: 'price', type: 'float' },
97 { name: 'availDate', mapping: 'availability', type: 'date', dateFormat: 'm/d/Y' },
98 { name: 'indoor', type: 'bool' }
99 ]
100 ),
101
102 sortInfo: { field: 'common', direction: 'ASC' }
103});
104
105// 构造可编辑的grid
106var grid = new Ext.grid.EditorGridPanel({
107 store: store,
108 cm: cm,
109 renderTo: 'grid',
110 width: 600,
111 height: 300,
112 autoExpandColumn: 'common',
113 title: 'Edit Plants?',
114 frame: true,
115 plugins: checkColumn,
116 clicksToEdit: 1
117});
118
119// 触发数据的加载
120store.load();
121});
我们在前边的系列中使用过数据和json来作为数据保存或者传递的格式,考虑到xml也很常用,这次我们使用了xml文件,内容如下:
plants.xml<?xml version="1.0" encoding="utf-8"?>
2<catalog>
3 <plant>
4 <common>Bloodroot</common>
5 <botanical>Sanguinaria canadensis</botanical>
6 <zone>4</zone>
7 <light>Mostly Shady</light>
8 <price>2.44</price>
9 <availability>03/15/2006</availability>
10 <indoor>true</indoor>
11 </plant>
12 <plant>
13 <common>Columbine</common>
14 <botanical>Aquilegia canadensis</botanical>
15 <zone>3</zone>
16 <light>Mostly Shady</light>
17 <price>9.37</price>
18 <availability>03/06/2006</availability>
19 <indoor>true</indoor>
20 </plant>
21 <plant>
22 <common>Marsh Marigold</common>
23 <botanical>Caltha palustris</botanical>
24 <zone>4</zone>
25 <light>Mostly Sunny</light>
26 <price>6.81</price>
27 <availability>05/17/2006</availability>
28 <indoor>false</indoor>
29 </plant>
30 <plant>
31 <common>Cowslip</common>
32 <botanical>Caltha palustris</botanical>
33 <zone>4</zone>
34 <light>Mostly Shady</light>
35 <price>9.90</price>
36 <availability>03/06/2006</availability>
37 <indoor>true</indoor>
38 </plant>
39 <plant>
40 <common>Dutchman's-Breeches</common>
41 <botanical>Dicentra cucullaria</botanical>
42 <zone>3</zone>
43 <light>Mostly Shady</light>
44 <price>6.44</price>
45 <availability>01/20/2006</availability>
46 <indoor>true</indoor>
47 </plant>
48 <plant>
49 <common>Ginger, Wild</common>
50 <botanical>Asarum canadense</botanical>
51 <zone>3</zone>
52 <light>Mostly Shady</light>
53 <price>9.03</price>
54 <availability>04/18/2006</availability>
55 <indoor>true</indoor>
56 </plant>
57 <plant>
58 <common>Hepatica</common>
59 <botanical>Hepatica americana</botanical>
60 <zone>4</zone>
61 <light>Mostly Shady</light>
62 <price>4.45</price>
63 <availability>01/26/2006</availability>
64 <indoor>true</indoor>
65 </plant>
66 <plant>
67 <common>Liverleaf</common>
68 <botanical>Hepatica americana</botanical>
69 <zone>4</zone>
70 <light>Mostly Shady</light>
71 <price>3.99</price>
72 <availability>01/02/2006</availability>
73 <indoor>true</indoor>
74 </plant>
75 <plant>
76 <common>Jack-In-The-Pulpit</common>
77 <botanical>Arisaema triphyllum</botanical>
78 <zone>4</zone>
79 <light>Mostly Shady</light>
80 <price>3.23</price>
81 <availability>02/01/2006</availability>
82 <indoor>true</indoor>
83 </plant>
84 <plant>
85 <common>Mayapple</common>
86 <botanical>Podophyllum peltatum</botanical>
87 <zone>3</zone>
88 <light>Mostly Shady</light>
89 <price>2.98</price>
90 <availability>06/05/2006</availability>
91 <indoor>true</indoor>
92 </plant>
93 <plant>
94 <common>Phlox, Woodland</common>
95 <botanical>Phlox divaricata</botanical>
96 <zone>3</zone>
97 <light>Sun or Shade</light>
98 <price>2.80</price>
99 <availability>01/22/2006</availability>
100 <indoor>false</indoor>
101 </plant>
102 <plant>
103 <common>Phlox, Blue</common>
104 <botanical>Phlox divaricata</botanical>
105 <zone>3</zone>
106 <light>Sun or Shade</light>
107 <price>5.59</price>
108 <availability>02/16/2006</availability>
109 <indoor>false</indoor>
110 </plant>
111 <plant>
112 <common>Spring-Beauty</common>
113 <botanical>Claytonia Virginica</botanical>
114 <zone>7</zone>
115 <light>Mostly Shady</light>
116 <price>6.59</price>
117 <availability>02/01/2006</availability>
118 <indoor>true</indoor>
119 </plant>
120 <plant>
121 <common>Trillium</common>
122 <botanical>Trillium grandiflorum</botanical>
123 <zone>5</zone>
124 <light>Sun or Shade</light>
125 <price>3.90</price>
126 <availability>04/29/2006</availability>
127 <indoor>false</indoor>
128 </plant>
129 <plant>
130 <common>Wake Robin</common>
131 <botanical>Trillium grandiflorum</botanical>
132 <zone>5</zone>
133 <light>Sun or Shade</light>
134 <price>3.20</price>
135 <availability>02/21/2006</availability>
136 <indoor>false</indoor>
137 </plant>
138 <plant>
139 <common>Violet, Dog-Tooth</common>
140 <botanical>Erythronium americanum</botanical>
141 <zone>4</zone>
142 <light>Shade</light>
143 <price>9.04</price>
144 <availability>02/01/2006</availability>
145 <indoor>true</indoor>
146 </plant>
147 <plant>
148 <common>Trout Lily</common>
149 <botanical>Erythronium americanum</botanical>
150 <zone>4</zone>
151 <light>Shade</light>
152 <price>6.94</price>
153 <availability>03/24/2006</availability>
154 <indoor>true</indoor>
155 </plant>
156 <plant>
157 <common>Adder's-Tongue</common>
158 <botanical>Erythronium americanum</botanical>
159 <zone>4</zone>
160 <light>Shade</light>
161 <price>9.58</price>
162 <availability>04/13/2006</availability>
163 <indoor>true</indoor>
164 </plant>
165 <plant>
166 <common>Anemone</common>
167 <botanical>Anemone blanda</botanical>
168 <zone>6</zone>
169 <light>Mostly Shady</light>
170 <price>8.86</price>
171 <availability>12/26/2006</availability>
172 <indoor>true</indoor>
173 </plant>
174 <plant>
175 <common>Grecian Windflower</common>
176 <botanical>Anemone blanda</botanical>
177 <zone>6</zone>
178 <light>Mostly Shady</light>
179 <price>9.16</price>
180 <availability>07/10/2006</availability>
181 <indoor>true</indoor>
182 </plant>
183 <plant>
184 <common>Bee Balm</common>
185 <botanical>Monarda didyma</botanical>
186 <zone>4</zone>
187 <light>Shade</light>
188 <price>4.59</price>
189 <availability>05/03/2006</availability>
190 <indoor>true</indoor>
191 </plant>
192 <plant>
193 <common>Bergamot</common>
194 <botanical>Monarda didyma</botanical>
195 <zone>4</zone>
196 <light>Shade</light>
197 <price>7.16</price>
198 <availability>04/27/2006</availability>
199 <indoor>true</indoor>
200 </plant>
201 <plant>
202 <common>Black-Eyed Susan</common>
203 <botanical>Rudbeckia hirta</botanical>
204 <zone>Annual</zone>
205 <light>Sunny</light>
206 <price>9.80</price>
207 <availability>06/18/2006</availability>
208 <indoor>false</indoor>
209 </plant>
210 <plant>
211 <common>Buttercup</common>
212 <botanical>Ranunculus</botanical>
213 <zone>4</zone>
214 <light>Shade</light>
215 <price>2.57</price>
216 <availability>06/10/2006</availability>
217 <indoor>true</indoor>
218 </plant>
219 <plant>
220 <common>Crowfoot</common>
221 <botanical>Ranunculus</botanical>
222 <zone>4</zone>
223 <light>Shade</light>
224 <price>9.34</price>
225 <availability>04/03/2006</availability>
226 <indoor>true</indoor>
227 </plant>
228 <plant>
229 <common>Butterfly Weed</common>
230 <botanical>Asclepias tuberosa</botanical>
231 <zone>Annual</zone>
232 <light>Sunny</light>
233 <price>2.78</price>
234 <availability>06/30/2006</availability>
235 <indoor>false</indoor>
236 </plant>
237 <plant>
238 <common>Cinquefoil</common>
239 <botanical>Potentilla</botanical>
240 <zone>Annual</zone>
241 <light>Shade</light>
242 <price>7.06</price>
243 <availability>05/25/2006</availability>
244 <indoor>true</indoor>
245 </plant>
246 <plant>
247 <common>Primrose</common>
248 <botanical>Oenothera</botanical>
249 <zone>3 - 5</zone>
250 <light>Sunny</light>
251 <price>6.56</price>
252 <availability>01/30/2006</availability>
253 <indoor>false</indoor>
254 </plant>
255 <plant>
256 <common>Gentian</common>
257 <botanical>Gentiana</botanical>
258 <zone>4</zone>
259 <light>Sun or Shade</light>
260 <price>7.81</price>
261 <availability>05/18/2006</availability>
262 <indoor>false</indoor>
263 </plant>
264 <plant>
265 <common>Blue Gentian</common>
266 <botanical>Gentiana</botanical>
267 <zone>4</zone>
268 <light>Sun or Shade</light>
269 <price>8.56</price>
270 <availability>05/02/2006</availability>
271 <indoor>false</indoor>
272 </plant>
273 <plant>
274 <common>Jacob's Ladder</common>
275 <botanical>Polemonium caeruleum</botanical>
276 <zone>Annual</zone>
277 <light>Shade</light>
278 <price>9.26</price>
279 <availability>02/21/2006</availability>
280 <indoor>true</indoor>
281 </plant>
282 <plant>
283 <common>Greek Valerian</common>
284 <botanical>Polemonium caeruleum</botanical>
285 <zone>Annual</zone>
286 <light>Shade</light>
287 <price>4.36</price>
288 <availability>07/14/2006</availability>
289 <indoor>true</indoor>
290 </plant>
291 <plant>
292 <common>California Poppy</common>
293 <botanical>Eschscholzia californica</botanical>
294 <zone>Annual</zone>
295 <light>Sunny</light>
296 <price>7.89</price>
297 <availability>03/27/2006</availability>
298 <indoor>false</indoor>
299 </plant>
300 <plant>
301 <common>Shooting Star</common>
302 <botanical>Dodecatheon</botanical>
303 <zone>Annual</zone>
304 <light>Mostly Shady</light>
305 <price>8.60</price>
306 <availability>05/13/2006</availability>
307 <indoor>true</indoor>
308 </plant>
309 <plant>
310 <common>Snakeroot</common>
311 <botanical>Cimicifuga</botanical>
312 <zone>Annual</zone>
313 <light>Shade</light>
314 <price>5.63</price>
315 <availability>07/11/2006</availability>
316 <indoor>true</indoor>
317 </plant>
318 <plant>
319 <common>Cardinal Flower</common>
320 <botanical>Lobelia cardinalis</botanical>
321 <zone>2</zone>
322 <light>Shade</light>
323 <price>3.02</price>
324 <availability>02/22/2006</availability>
325 <indoor>true</indoor>
326 </plant>
327</catalog>
我们先来体验下效果:
我们注意到被编辑过的单元格左上角有个红色的小箭头,并且第一列是不允许为空的,第二列可以从下拉列表来选择,第三列在编辑状态显示的是原始数据,第四列可以从一个日期控件中来选择日期。现在我们来看一下主要的代码:
第12行,和本次的主题无关,只是初始化一个全局QuickTips对象,该对象为元素提供漂亮和可定制的提示工具(tooltips)。
第15-17行,是列的renderer函数, 在下边构造ColumnModel的时候会用到。
第20行,取了个别名,下文中需要使用Ext.form的地方,就可以简单的使用fm来代替了。
第23-27行,使用CheckColumn类构造了一个显示checkbox的列, 该类在一个单独的js文中定义。我们也可以使用renderer函数很方便的做到这一点,但是有现成的没有理由不用。
第30-79行,构造了ColumnModel类的对象,我们在其中使用了editor来提供编辑的功能。editor其实是Ext.form.Field类或者其子类的一个对象,我们会在学习表单的时候再详细介绍Ext.form命名空间中的类。这里我们只需要注意在构造Ext.form.ComboBox对象的时候,需要在页面上有一个HTML的SELECT元素,配置参数transform需要这个SELECT元素。
第83-103行构造grid需要的Store对象,现在我们只要能够对照plant.xml文件大概看明白就可以了 。
第106-117就是我们想要的可编辑的grid了,大部分参数我们都用过,这里简单介绍下最后三个参数:
frame:Boolean类型的值,默认为false,呈现出普通的1个象素的方形边框;为true的时候可以是定制的圆弧形转角(custom rounded corners )。有兴趣的朋友可以用firebug观察一下不同值的时候生成的html代码。
plugins:为grid组件提供自定义功能的插件,只有在插件的init方法需要grid组件的引用作为参数的时候才需要。
clicksToEdit:变为可编辑状态需要点击鼠标的次数,默认值是2。
下边给出我们的页面文件:
edit-grid.htm
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<head>
4 <title>可以编辑的grid</title>
5 <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" />
6
7 <script type="text/javascript" src="extjs/ext-base-debug.js"></script>
8
9 <script type="text/javascript" src="extjs/ext-all-debug.js"></script>
10
11 <script type="text/javascript" src="extjs/ext-lang-zh_CN.js"></script>
12 <script type="text/javascript" src="extjs/CheckColumn.js"></script>
13
14 <script type="text/javascript" src="js/edit-grid.js"></script>
15
16</head>
17<body>
18<select name="light" id="light" style="display: none;">
19 <option value="Shade">Shade</option>
20 <option value="Mostly Shady">Mostly Shady</option>
21 <option value="Sun or Shade">Sun or Shade</option>
22 <option value="Mostly Sunny">Mostly Sunny</option>
23 <option value="Sunny">Sunny</option>
24 </select>
25 <div id="grid">
26 </div>
27</body>
28</html>
29
需要注意的是,当我们对grid中的数据编辑之后并未保存,所以页面一旦刷新,我们的改动便会丢失。另外,我们也并未对数据进行有效性验证,只是由列的editor提供了最基本的验证,比如数据不能为空。我们会在下一个系列对grid进行增加和删除操作中学习到如何解决这些问题。
发表评论
-
npm安装教程
2020-11-23 16:09 691一、使用之前,我们先来掌握3个东西是用来干什么的。 npm ... -
手机上万能返回上一页代替history.go(-1)
2016-05-13 11:25 819最近在做wap2.0的手机wap,写返回上一页的时候,开始 ... -
3.nodejs nodejs的mysql模块
2016-04-12 22:20 558安装nodejs的mysql模块首先要选定一个数据库,我选择 ... -
2.nodejs 使用Express4.x搭建第一个Web应用
2016-04-12 09:36 600Express4.x 是一个开源的node.js项目框架 ... -
1.nodejs windows 下安装nodejs
2016-04-12 09:34 4091.下载: 在nodejs的官方网站下载mis文件。ht ... -
Nodejs学习
2016-04-11 17:21 530将介绍如何利Javascript做为服务端脚本,通过Node ... -
HTML5做手机站页面字体显示很小的解决方法
2016-05-28 23:31 737HTML5做手机站需要加上一部分代码,不然字体会显示很小的 ... -
jquery 校验
2015-07-07 11:16 0EasyUI 验证框使用方法: ... -
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2015-05-20 09:49 590一、javascript函数实现: //JavaS ... -
//from提交表单 使用ajax异步读取,回调函数
2015-04-24 18:05 0<%@ page language="ja ... -
js获取带checkbox行的记录的Id值的两个方法
2015-04-09 14:44 681第一种: function updateProcess() ... -
基于注解的SpringMVC简单介绍
2015-04-03 11:58 593SpringMVC是一个基于DispatcherServle ... -
Linux环境下Nginx的安装
2014-03-28 13:26 488Linux下命令: /usr/local/nginx/s ... -
自用打印(二)
2014-03-19 17:30 579<html> <title> ... -
自用打印方法(一)
2014-03-19 17:25 469经过验证的,自用的。 ... -
各种微博分享代码
2014-03-19 15:56 947<HTML> <HEAD> ... -
JSP页面打印(二)
2014-03-18 11:04 763<HTML><HEAD><T ... -
JSP页面打印方法(一)
2014-03-18 10:57 3170JSP页面打印方法 方法一:function Print ... -
jquery和js初始化加载的多种方法
2014-01-20 14:48 909jquery和js初始化加载页面的区别: jquery:等 ... -
js自动刷新当前页面
2013-12-19 14:09 798reload 方法,该方法强 ...
相关推荐
ExtJS学习笔记.docExtJS学习笔记.docExtJS学习笔记.docExtJS学习笔记.doc
目录 1. ExtJs 结构树 2 2. 对ExtJs的态度 3 3. Ext.form概述 4 4. Ext.TabPanel篇 5 5. Function扩展篇 7 6. Ext.data.Store篇 10 7. Ext.data.JsonReader篇一 12 ...28. extJs 2.0学习笔记(ext.js篇) 77
ExtJS4学习笔记(五)---Grid分页 ExtJS4学习笔记(六)---多表头Grid ExtJS4学习笔记(七)---带搜索的Grid(SearchGrid) ExtJS4学习笔记(八)---Grid多选/全选 ExtJS4学习笔记(九)---ExtJS4 EditGrid(可编辑的Grid) ...
### Extjs 5 学习笔记之 SenchaCmd 深入解析 #### 一、SenchaCmd 的简介 SenchaCmd 是一个跨平台的命令行工具,它为基于 ExtJS 和 Sencha Touch 应用程序的开发周期提供了全面的支持。从创建应用程序的基础结构到...
适合ExtJs开发人员extjs技术上手以及深入
EXTJS in Action 是一本专为学习EXTJS编写的书籍,但这里我们主要关注学习笔记中的关键知识点。 首先,EXTJS的目录结构非常重要,因为它包含了所有必要的资源和源码: 1. `adapter`:这部分包含了适配器,用于将...
ExtJs简明教程+Extjs学习笔记,来源网络,免费奉送,我讨厌需要资源分~
语言程序设计资料:ExtJs学习笔记-2积分.doc
这个学习笔记涵盖了从基础到高级的多个主题,帮助读者深入理解ExtJs的核心概念和技术。以下是一些关键知识点的详细说明: 1. **ExtJs 结构树**:这部分内容可能涉及ExtJs如何构建可自定义的用户界面组件树,包括...
在探讨《ExtJS学习心得笔记》这一主题时,我们不仅会深入理解ExtJS框架的核心概念与实践技巧,还会从新手的角度出发,提炼出一系列有助于快速上手的学习策略,避免常见的学习陷阱,确保学习过程高效而有成效。...
ExtJS 是一个强大的JavaScript框架,主要用于构建富客户端Web应用程序。...学习ExtJS可以帮助开发者快速构建功能丰富的、交互性强的Web应用。通过深入理解和实践,可以提升开发效率,创建出符合现代Web标准的用户界面。
Extjs4.0学习笔记大全.pdf,供大家学习
ExtJS4学习笔记(五)---Grid分页 ExtJS4学习笔记(八)---Grid多选 全选 ExtJS4学习笔记(六)---多表头Grid ExtJS4学习笔记(十)---ExtJS4图片验证码的实现 ExtJS4学习笔记(十一)---TabPanel ExtJS4学习笔记(十三)---上传...
在本篇学习笔记中,我们将深入探讨EXTJS中最基本的Grid的构建和配置。 首先,EXTJS的Grid由多个组件构成,其中最重要的是`ColumnModel`,它负责定义Grid中的列属性。在示例代码中,我们创建了一个`ColumnModel`对象...