热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> AJAX编程>>正文内容

关于ExtJS的工具栏动态添加按钮(从后台数据库读取信息)

发布时间:2010年05月25日点击数: 佚名

我想在工具栏中动态添加按钮,至于添加什么按钮,则从后台数据库中读取信息。
后台代码(C#)

  1. //以下是工具栏按钮测试代码,生成JSON 
  2.         string json = "[{'id': '1','text':'测试1'},{'id':'2','text':'测试2'},{'id':'4','text':'测试3'}]"
  3.         json = "{'totalProperty':'3','result':" + json + "}"
  4.         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); 

先创建好工具栏,我再添加按钮,而且是一次性添加好。结果运行成功!

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作