关于ExtJS的工具栏动态添加按钮(从后台数据库读取信息)
我想在工具栏中动态添加按钮,至于添加什么按钮,则从后台数据库中读取信息。
后台代码(C#)
//以下是工具栏按钮测试代码,生成JSON
string json = "[{'id': '1','text':'测试1'},{'id':'2','text':'测试2'},{'id':'4','text':'测试3'}]";
json = "{'totalProperty':'3','result':" + json + "}";
Response.Write(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();
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
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
先创建好工具栏,我再添加按钮,而且是一次性添加好。结果运行成功!
我查了许多网友提供的资料,结合大家的思路,才有以上代码,在此衷心感谢广大网友!
希望本文对大家有帮助!