文章来源:http://www.blogjava.net/Liangtianyu/archive/2007/11/12/160017.html
Tags: extext | javascriptjavascript
2007-12-26 12:55:13 | 编辑
Ext 2.0使用:组件开发模式
Ext 2.0中取消了组件的构造方法,你完全可以在initComponent中执行自己的构造逻辑。假如开发过
Asp.Net的控件,那么你应该比较熟悉这种开发模式。只要你了解Ext控件的各个方法的生命周期,调用模式,那么你可以随心所欲的继承和扩展Ext的组件,和开发自己的新的组件。
比如我们需要一个显示用户信息的Grid,那么在Ext 2.0中可以更加方便的实现。
以下代码是显示用户信息的GridPanel:
以下是查找用户对话窗体:
Asp.Net的控件,那么你应该比较熟悉这种开发模式。只要你了解Ext控件的各个方法的生命周期,调用模式,那么你可以随心所欲的继承和扩展Ext的组件,和开发自己的新的组件。
比如我们需要一个显示用户信息的Grid,那么在Ext 2.0中可以更加方便的实现。
以下代码是显示用户信息的GridPanel:
1
/**//**
2
* @author Terry
3
*/
4
5
EasyNet.UserGrid = Ext.extend(Ext.grid.GridPanel,
{
6
serviceURL: '',
7
loadMask:
{
8
msg: '加载用户信息
'
9
},
10
viewConfig:
{
11
forceFit: true
12
},
13
14
initComponent: function()
{
15
var url = this.serviceURL;
16
17
this.store = new Ext.data.Store(
{
18
proxy: new Ext.data.HttpProxy(
{
19
url: url + '/QueryUser'
20
}),
21
baseParams:
{
22
fields: '*',
23
filter: 'Status=1'
24
},
25
reader: new Ext.data.XmlReaderEx(
{
26
root: 'User',
27
totalRecords: 'Count',
28
record: 'UserData',
29
id: 'ID'
30
}, [
31
{name: 'LoginName', mapping: 'LoginName'},
32
{name: 'UserName', mapping: 'UserName'},
33
{name: 'Sex', type: 'int', mapping: 'Sex'},
34
{name: 'RegDate', type: 'date', format: 'Y-m-d', mapping: 'RegDate'}
35
])
36
});
37
38
this.cm = new Ext.grid.ColumnModel([
{
39
header: '登录名称',
40
dataIndex: 'LoginName'
41
},
{
42
header: '用户名称',
43
dataIndex: 'UserName'
44
},
{
45
header: '用户姓名',
46
dataIndex: 'UserName'
47
},
{
48
header: '性别',
49
dataIndex: 'Sex',
50
renderer: function(v, params, data)
{
51
if(v == 1)
{
52
return '男';
53
}
54
55
return '女';
56
}
57
},
{
58
header: '注册时间',
59
dataIndex: 'RegDate'
60
}]);
61
62
this.cm.defaultSortable = true;
63
64
var searchBtn = new Ext.Button(
{
65
text: '查找'
66
});
67
var delBtn = new Ext.Button(
{
68
text: '删除'
69
});
70
71
searchBtn.on('click', this.onSearch, this);
72
delBtn.on('click', this.onDelete, this);
73
74
this.tbar = [searchBtn, delBtn];
75
76
var store = this.store;
77
78
this.bbar = new Ext.PagingToolbarEx(
{
79
store: store,
80
displayMsg: '显示用户信息
{0} -
{1} /
{2}',
81
emptyMsg: '没有用户信息',
82
paramNames:
{
83
start: 'pageIndex',
84
limit: 'pageSize'
85
}
86
});
87
88
EasyNet.UserGrid.superclass.initComponent.call(this);
89
},
90
91
loadData: function()
{
92
var params = Ext.util.JSON.decode(Ext.util.JSON.encode(this.store.baseParams));
93
params.pageIndex = 1;
94
params.pageSize = 20;
95
this.store.load(
{params: params});
96
},
97
98
onSearch: function()
{
99
if(!this.searchWindow)
{
100
this.searchWindow = new EasyNet.SearchUserWindow(
{
101
searchTo:this
102
});
103
}
104
105
this.searchWindow.show();
106
},
107
108
onDelete: function()
{
109
var sls = this.getSelections();
110
var count = sls.length;
111
112
if(count == 0)
{
113
return;
114
}
115
116
var surl = this.serviceURL;
117
var grid = this;
118
119
Ext.Msg.show(
{
120
title: '确认删除用户',
121
msg: '确实要删除所选用户吗?',
122
buttons: Ext.Msg.YESNO,
123
icon: Ext.Msg.WARNING,
124
fn: function(btn, text)
{
125
if(btn == 'yes')
{
126
var filter = '';
127
128
for(var i = 0; i < count; i ++)
{
129
if(i == 0)
{
130
filter = new String(sls[0].id);
131
}
132
else
{
133
filter = filter + ',' + sls[i].id;
134
}
135
}
136
137
var store = new Ext.data.Store(
{
138
proxy: new Ext.data.HttpProxy(
{
139
url: surl + '/DeleteUser'
140
})
141
});
142
143
store.load(
{params:
{filter: 'ID IN(' + filter +')'}});
144
grid.loadData();
145
}
146
}
147
});
148
}
149
});
150
151
Ext.reg('easynetusergrid', EasyNet.UserGrid);

/**//**2
* @author Terry3
*/4

5

EasyNet.UserGrid = Ext.extend(Ext.grid.GridPanel,
{6
serviceURL: '',7

loadMask:
{8
msg: '加载用户信息
'9
},10

viewConfig:
{11
forceFit: true12
},13
14

initComponent: function()
{15
var url = this.serviceURL;16
17

this.store = new Ext.data.Store(
{18

proxy: new Ext.data.HttpProxy(
{19
url: url + '/QueryUser'20
}),21

baseParams:
{22
fields: '*',23
filter: 'Status=1'24
},25

reader: new Ext.data.XmlReaderEx(
{26
root: 'User',27
totalRecords: 'Count',28
record: 'UserData',29
id: 'ID'30
}, [31

{name: 'LoginName', mapping: 'LoginName'},32

{name: 'UserName', mapping: 'UserName'},33

{name: 'Sex', type: 'int', mapping: 'Sex'},34

{name: 'RegDate', type: 'date', format: 'Y-m-d', mapping: 'RegDate'}35
])36
});37
38

this.cm = new Ext.grid.ColumnModel([
{39
header: '登录名称',40
dataIndex: 'LoginName'41

},
{42
header: '用户名称',43
dataIndex: 'UserName'44

},
{45
header: '用户姓名',46
dataIndex: 'UserName'47

},
{48
header: '性别', 49
dataIndex: 'Sex',50

renderer: function(v, params, data)
{51

if(v == 1)
{52
return '男';53
}54
55
return '女';56
}57

},
{58
header: '注册时间', 59
dataIndex: 'RegDate'60
}]);61
62
this.cm.defaultSortable = true;63
64

var searchBtn = new Ext.Button(
{65
text: '查找'66
});67

var delBtn = new Ext.Button(
{68
text: '删除'69
});70
71
searchBtn.on('click', this.onSearch, this);72
delBtn.on('click', this.onDelete, this);73
74
this.tbar = [searchBtn, delBtn];75
76
var store = this.store;77
78

this.bbar = new Ext.PagingToolbarEx(
{79
store: store,80

displayMsg: '显示用户信息
{0} -
{1} /
{2}',81
emptyMsg: '没有用户信息',82

paramNames:
{83
start: 'pageIndex',84
limit: 'pageSize'85
}86
});87
88
EasyNet.UserGrid.superclass.initComponent.call(this);89
},90
91

loadData: function()
{92
var params = Ext.util.JSON.decode(Ext.util.JSON.encode(this.store.baseParams));93
params.pageIndex = 1;94
params.pageSize = 20;95

this.store.load(
{params: params});96
},97
98

onSearch: function()
{99

if(!this.searchWindow)
{100

this.searchWindow = new EasyNet.SearchUserWindow(
{101
searchTo:this102
});103
}104
105
this.searchWindow.show();106
},107
108

onDelete: function()
{109
var sls = this.getSelections();110
var count = sls.length;111
112

if(count == 0)
{113
return;114
}115
116
var surl = this.serviceURL;117
var grid = this;118
119

Ext.Msg.show(
{120
title: '确认删除用户',121
msg: '确实要删除所选用户吗?',122
buttons: Ext.Msg.YESNO,123
icon: Ext.Msg.WARNING,124

fn: function(btn, text)
{125

if(btn == 'yes')
{126
var filter = '';127
128

for(var i = 0; i < count; i ++)
{129

if(i == 0)
{130
filter = new String(sls[0].id);131
}132

else
{133
filter = filter + ',' + sls[i].id;134
}135
}136
137

var store = new Ext.data.Store(
{138

proxy: new Ext.data.HttpProxy(
{139
url: surl + '/DeleteUser'140
})141
});142
143

store.load(
{params:
{filter: 'ID IN(' + filter +')'}});144
grid.loadData();145
}146
}147
});148
}149
});150

151
Ext.reg('easynetusergrid', EasyNet.UserGrid);以下是查找用户对话窗体:
1
/**//**
2
* @author Terry
3
*/
4
5
EasyNet.SearchUserWindow = Ext.extend(Ext.Window,
{
6
width: 350,
7
height: 250,
8
resizable: false,
9
layout: 'form',
10
plain: true,
11
bodyStyle: 'padding:5px;',
12
buttonAlign: 'right',
13
modal:true,
14
title: '查找用户',
15
closeAction: 'hide',
16
buttons: [
{
17
text: '确定'
18
},
{
19
text: '取消'
20
}],
21
22
initComponent: function()
{
23
this.items = [
{
24
layout: 'column',
25
baseCls: 'x-plain',
26
items: [
{
27
columnWidth:0.08,
28
layout: 'form',
29
baseCls: 'x-plain',
30
items: [
{
31
hideLabel: true,
32
xtype: 'checkbox',
33
name: 'ckLoginName'
34
},
{
35
hideLabel: true,
36
xtype: 'checkbox',
37
name: 'ckUserName'
38
},
{
39
hideLabel: true,
40
xtype: 'checkbox',
41
name: 'ckDate'
42
}]
43
},
{
44
columnWidth: 0.8,
45
layout: 'form',
46
baseCls: 'x-plain',
47
items: [
{
48
xtype: 'textfield',
49
fieldLabel: '登录名称',
50
emptyText: '登录名称',
51
maxLength: 50,
52
name: 'loginName'
53
},
{
54
xtype: 'textfield',
55
fieldLabel: '用户名称',
56
emptyText: '用户名称',
57
maxLength: 50,
58
name: 'userName'
59
},

/**//**2
* @author Terry3
*/4

5

EasyNet.SearchUserWindow = Ext.extend(Ext.Window,
{6
width: 350,7
height: 250,8
resizable: false,9
layout: 'form',10
plain: true,11
bodyStyle: 'padding:5px;',12
buttonAlign: 'right',13
modal:true,14
title: '查找用户',15
closeAction: 'hide',16

buttons: [
{17
text: '确定'18

},
{19
text: '取消'20
}],21
22

initComponent: function()
{23

this.items = [
{24
layout: 'column',25
baseCls: 'x-plain',26

items: [
{27
columnWidth:0.08,28
layout: 'form',29
baseCls: 'x-plain',30

items: [
{31
hideLabel: true,32
xtype: 'checkbox',33
name: 'ckLoginName'34

},
{35
hideLabel: true,36
xtype: 'checkbox',37
name: 'ckUserName'38

},
{39
hideLabel: true,40
xtype: 'checkbox',41
name: 'ckDate'42
}]43

},
{44
columnWidth: 0.8,45
layout: 'form',46
baseCls: 'x-plain',47

items: [
{48
xtype: 'textfield',49
fieldLabel: '登录名称',50
emptyText: '登录名称',51
maxLength: 50,52
name: 'loginName'53

},
{54
xtype: 'textfield',55
fieldLabel: '用户名称',56
emptyText: '用户名称',57
maxLength: 50,58
name: 'userName'59

},