extjs学习笔记(六) grid中数据的保存,添加和删除
在上一个系列当中,我们学习了如何对grid中的内容进行编辑,但是编辑的结果我们并没有保存,这在实际的应用中是没有什么意义的。在有些情况下,除了编辑之外,还要通过grid进行数据的增加和删除,这两个操作也涉及到对于数据的保存。在这个系列里边,我们将学习如何保存数据以及通过grid对数据进行增加和删除。我们在前边的学习过程中已经知道,grid其实只是显示数据,它通过配置参数store来获得数据,这个参数需要的是Store类或者其子类的一个对象,里边封装了我们需要的数据。我们现在应该已经比较熟悉Store类了,这次我们需要使用它的一个属性modified,里边保存了被修改过的记录的集合。我们通过把上个系列中的例子改变一下来看看如何保存数据:
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1http://www.cnblogs.com/Images/OutliningIndicators/None.gif///<reference path="vswd-ext_2.0.2.js" />
2http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif/**//*
3http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif*作者:大笨
4http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif*日期:2009-10-20
5http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif*版本:1.0
6http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif*博客地址:http://yage.cnblogs.com
7http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif*QQ:14202190
8http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif*/
9http://www.cnblogs.com/Images/OutliningIndicators/None.gifExt.BLANK_IMAGE_URL = '../extjs/resources/images/default/s.gif';
10http://www.cnblogs.com/Images/OutliningIndicators/None.gif
11http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gifExt.onReady(function() http://www.cnblogs.com/Images/dot.gif{
12http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif Ext.QuickTips.init();
13http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
14http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif //格式化日期
15http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif function formatDate(value) http://www.cnblogs.com/Images/dot.gif{
16http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif return value ? value.dateFormat('Y年m月d日') : '';
17http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
18http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
19http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif // 别名
20http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif var fm = Ext.form;
21http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
22http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif //构造一个只能包含checkbox的列
23http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif var checkColumn = new Ext.grid.CheckColumn(http://www.cnblogs.com/Images/dot.gif{
24http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif header: 'Indoor?',
25http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif dataIndex: 'indoor',
26http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif width: 55
27http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif });
28http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
29http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif // 构造ColumnModel
30http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif var cm = new Ext.grid.ColumnModel(http://www.cnblogs.com/Images/dot.gif{
31http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif columns: [http://www.cnblogs.com/Images/dot.gif{
32http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif id: 'common',
33http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif header: 'Common Name',
34http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif dataIndex: 'common',
35http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif width: 220,
36http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif // 使用上边定义好的别名
37http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif editor: new fm.TextField(http://www.cnblogs.com/Images/dot.gif{
38http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif allowBlank: false
39http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif })
40http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif }, http://www.cnblogs.com/Images/dot.gif{
41http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif header: 'Light',
42http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif dataIndex: 'light',
43http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif width: 130,
44http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif editor: new fm.ComboBox(http://www.cnblogs.com/Images/dot.gif{
45http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif typeAhead: true,
46http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif triggerAction: 'all',
47http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif transform: 'light',
48http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif lazyRender: true,
49http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif listClass: 'x-combo-list-small'
50http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif })
51http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif }, http://www.cnblogs.com/Images/dot.gif{
52http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif header: 'Price',
53http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif dataIndex: 'price',
54http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif width: 70,
55http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif align: 'right',
56http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif renderer: 'usMoney',
57http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif editor: new fm.NumberField(http://www.cnblogs.com/Images/dot.gif{
58http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif allowBlank: false,
59http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif allowNegative: false,
60http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif maxValue: 100000
61http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif })
62http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif }, http://www.cnblogs.com/Images/dot.gif{
63http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif header: 'Available',
64http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif dataIndex: 'availDate',
65http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif width: 95,
66http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif renderer: formatDate,
67http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif editor: new fm.DateField(http://www.cnblogs.com/Images/dot.gif{
68http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif format: 'Y年m月d日',
69http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif minValue: '01/01/06',
70http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif disabledDays: [0, 6],
71http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif disabledDaysText: 'Plants are not available on the weekends'
72http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif })
73http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif },
74http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif checkColumn
75http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif ],
76http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif defaults: http://www.cnblogs.com/Images/dot.gif{
77http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif sortable: true
78http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
79http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif });
80http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
81http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
82http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif // 构造一个Store对象
83http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif var store = new Ext.data.Store(http://www.cnblogs.com/Images/dot.gif{
84http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
85http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif url: 'plants.xml',
86http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
87http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif reader: new Ext.data.XmlReader(
88http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif http://www.cnblogs.com/Images/dot.gif{
89http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif record: 'plant'
90http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif },
91http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
92http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif [
93http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif http://www.cnblogs.com/Images/dot.gif{ name: 'common', type: 'string' },
94http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif http://www.cnblogs.com/Images/dot.gif{ name: 'botanical', type: 'string' },
95http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif http://www.cnblogs.com/Images/dot.gif{ name: 'light' },
96http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif http://www.cnblogs.com/Images/dot.gif{ name: 'price', type: 'float' },
97http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif http://www.cnblogs.com/Images/dot.gif{ name: 'availDate', mapping: 'availability', type: 'date', dateFormat: 'm/d/Y' },
98http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif http://www.cnblogs.com/Images/dot.gif{ name: 'indoor', type: 'bool' }
99http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif ]
100http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif ),
101http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
102http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif sortInfo: http://www.cnblogs.com/Images/dot.gif{ field: 'common', direction: 'ASC' }
103http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif });
104http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
105http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif // 构造可编辑的grid
106http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif var grid = new Ext.grid.EditorGridPanel(http://www.cnblogs.com/Images/dot.gif{
107http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif store: store,
108http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif cm: cm,
109http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif renderTo: 'grid',
110http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif width: 600,
111http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif height: 300,
112http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif autoExpandColumn: 'common',
113http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif title: 'Edit Plants?',
114http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif frame: true,
115http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif plugins: checkColumn,
116http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif clicksToEdit: 1,
117http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif listeners: http://www.cnblogs.com/Images/dot.gif{
118http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif "afterEdit": http://www.cnblogs.com/Images/dot.gif{
119http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif fn: afterEdit,
120http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif scope: this
121http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
122http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif },
123http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif tbar: [http://www.cnblogs.com/Images/dot.gif{
124http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif text: "保存",
125http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif handler: function() http://www.cnblogs.com/Images/dot.gif{
126http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif var modified = store.modified;
127http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif updateData(modified);
128http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
129http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }]
130http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif });
131http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
132http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif // 触发数据的加载
133http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif store.load();
134http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
135http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif //发送数据到服务器端进行更新
136http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif function updateData(modified) http://www.cnblogs.com/Images/dot.gif{
137http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif var json = [];
138http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif Ext.each(modified, function(item) http://www.cnblogs.com/Images/dot.gif{
139http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif json.push(item.data);
140http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif });
141http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif if (json.length > 0) http://www.cnblogs.com/Images/dot.gif{
142http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif Ext.Ajax.request(http://www.cnblogs.com/Images/dot.gif{
143http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif url: "EditGrid.aspx",
144http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif params: http://www.cnblogs.com/Images/dot.gif{ data: Ext.util.JSON.encode(json) },
145http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif method: "POST",
146http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif success: function(response) http://www.cnblogs.com/Images/dot.gif{
147http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif Ext.Msg.alert("信息", "数据更新成功!", function() http://www.cnblogs.com/Images/dot.gif{ store.reload(); });
148http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif },
页:
[1]