我想在工具栏中动态添加按钮,至于添加什么按钮,则从后台数据库中读取信息。
后台代码(C#)
//
以下是工具栏按钮测试代码,生成JSON
string
json
=
"
[{'id': '1','text':'测试1'},{'id':'2','text':'测试2'},{'id':'4','text':'测试3'}]
"
;
json
=
"
{'totalProperty':'3','result':
"
+
json
+
"
}
"
;
Response.Write(json);
但JS怎么写呢?这个问题困扰了我很久。开始写了以下代码,但不成功:
1
ToolBar
=
function
() {
2
3
Ext.Ajax.request({
4
url:
'
rolegroup.aspx
'
,
5
params:
''
,
6
method:
'
POST
'
,
7
success:
function
(response, options) {
8
//
alert('success');
9
var
rsp
=
Ext.util.JSON.decode(response.responseText);
10
var
total
=
rsp.totalProperty;
11
//
alert(total);
12
//
alert(rsp.result[0].text);
13
var
arrays
=
new
Array(total);
14
for
(
var
i
=
0
; i
<
total; i
++
) {
15
//
arrays[i] = new Ext.Toolbar.Button({ text: rsp.result[i].text, iconCls: 'icon-home' });
16
arrays[i]
=
{ text: rsp.result[i].text, iconCls:
'
icon-home
'
};
17
if
(i
==
(total
-
1
))
18
arr
+=
'
{text:
'
+
rsp.result[i].text
+
'
}
'
19
else
20
arr
+=
'
{text:
'
+
rsp.result[i].text
+
'
},
'
;
21
}
22
arr
=
'
{[
'
+
arr
+
'
]}
'
;
23
alert(arr);
24
//
alert(arrays.length);
25
//
alert(arrays[1]['text'] + ',' + arrays[1]['iconCls']);
26
var
o
=
{ items: arrays };
27
//
Ext.apply(this, A, o); //不成功?
28
Ext.apply(
this
, o);
29
},
30
failure:
function
() {
31
Ext.Msg.alert(
"
提示信息
"
,
"
按钮加载失败,请稍后重试!
"
);
32
}
33
});
34
35
ToolBar.superclass.constructor.call(
this
, {
36
id:
'
tool_bar
'
,
37
cls:
'
top-toolbar
'
,
38
})
39
};
40
41
Ext.extend(ToolBar, Ext.Toolbar);
42
43 //在后台创建toolbar = new ToolBar();
以上代码,arrays可以成功读取后台数据,但工具栏并不能显示出相应按钮。也就是说Ext.apply(this, o)并不成功!
事实上,Ajax是异步调用后台数据的,toolbar = new ToolBar()先运行了,但并没有同时立即运行读取后台数据的代码,而是滞后的。后来再运行Ext.apply(this, o)肯定不成功的。
我把代码改成以下所示:
1
SetToolButtons
=
function
(tbr) {
2
Ext.Ajax.request({
3
url:
'
rolegroup.aspx
'
,
4
params:
''
,
5
method:
'
POST
'
,
6
success:
function
(response, options) {
7
var
rsp
=
Ext.util.JSON.decode(response.responseText);
8
var
total
=
rsp.totalProperty;
9
var
arrays
=
new
Array(total);
10
for
(
var
i
=
0
; i
<
total; i
++
) {
11
arrays[i]
=
new
Ext.Toolbar.Button({ text: rsp.result[i].text, iconCls:
'
icon-home
'
});
12
}
13
tbr.add(arrays);
14
tbr.addFill();
15
tbr.addButton(
16
{
17
text:
'
我的桌面
'
,
18
iconCls:
'
icon-desktop
'
,
19
scope:
this
20
});
21
tbr.addSeparator();
22
tbr.addButton([
23
{
24
text:
'
重新登录
'
,
25
iconCls:
'
icon-user
'
26
},
27
{
28
text:
'
退出系统
'
,
29
iconCls:
'
icon-exit
'
30
}]);
31
},
32
failure:
function
() {
33
Ext.Msg.alert(
"
提示信息
"
,
"
按钮加载失败,请稍后重试!
"
);
34
}
35
});
36
};
37
38
Ext.onReady(
function
() {
39
Ext.QuickTips.init();
40
var
toolbar
=
new
Ext.Toolbar({
41
id:
'
tool_bar
'
,
42
cls:
'
top-toolbar
'
43
});
44
SetToolButtons(toolbar);
45
}
46
先创建好工具栏,我再添加按钮,而且是一次性添加好。结果运行成功!
我查了许多网友提供的资料,结合大家的思路,才有以上代码,在此衷心感谢广大网友!
希望本文对大家有帮助!