日期:2014-05-16 浏览次数:20564 次
?
转载:http://www.cnblogs.com/wangsj/archive/2010/05/25/1743338.html
问题讨论:http://home.cnblogs.com/group/topic/39468.html
作者:王善军
?
?
?
?
?
我想在工具栏中动态添加按钮,至于添加什么按钮,则从后台数据库中读取信息。
后台代码(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怎么写呢?这个问题困扰了我很久。开始写了以下代码,但不成功:
?
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 ToolBar = function() { Ext.Ajax.request({ url: 'rolegroup.aspx', params: '', method: 'POST', success: function(response, options) { //alert('success'); var rsp = Ext.util.JSON.decode(response.responseText); var total = rsp.totalProperty; //alert(total); //alert(rsp.result[0].text); var arrays = new Array(total); for (var i = 0; i < total; i++) { //arrays[i] = new Ext.Toolbar.Button({ text: rsp.result[i].text, iconCls: 'icon-home' }); arrays[i] = { text: rsp.result[i].text, iconCls: 'icon-home' }; if (i == (total - 1)) arr += '{text:' + rsp.result[i].text + '}' else arr += '{text:' + rsp.result[i].text + '},'; } arr = '{[' + arr + ']}'; alert(arr); //alert(arrays.length); //alert(arrays[1]['text'] + ',' + arrays[1]['iconCls']); var o = { items: arrays }; //Ext.apply(this, A, o); //不成功? Ext.apply(this, o); }, failure: function() { Ext.Msg.alert("提示信息", "按钮加载失败,请稍后重试!"); } }); ToolBar.superclass.constructor.call(this, { id: 'tool_bar', cls: 'top-toolbar', }) }; Ext.extend(ToolBar, Ext.Toolbar); //在后台创建toolbar = new ToolBar();
?
?
?
??????? 以上代码,arrays可以成功读取后台数据,但工具栏并不能显示出相应按钮。也就是说Ext.apply(this ,?o)并不成功!
?
事实上,Ajax是异步调用后台数据的,toolbar = new ToolBar()先运行了,但并没有同时立即运行读取后台数据的代码,而是滞后的。后来再运行Ext.apply(this ,?o) 肯定不成功的。
?
?
我把代码改成以下所示:
?
?
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 SetToolButtons = function(tbr) { Ext.Ajax.request({ url: 'rolegroup.aspx', params: '', method: 'POST', success: function(response, options) { var rsp = Ext.util.JSON.decode(response.responseText); var total = rsp.totalProperty; var arrays = new Array(total); for (var i = 0; i < total; i++) { arrays[i] = new Ext.Toolbar.Button({ text: rsp.result[i].text, iconCls: 'icon-home' }); } tbr.a