原代码如下:  
function showmenu(value){
            //获得toolbar对象
            var showmenu_tb = Ext.getCmp('toolbar');
            var showmenu_tbItems = showmenu_tb.items;
            if (showmenu_tbItems != null) {
                for (var i = 0; i < showmenu_tbItems.length; i++) {
                    var showmenu_item = showmenu_tbItems.get(i);
                    showmenu_item.destroy();
                }
            }
            Ext.Ajax.request({
                url: 'flushMenuItem.action',
                method: 'post',
                params: {
                    "menuid": value
                },
                success: function(response, options){
                    var strObj = Ext.util.JSON.decode(response.responseText);
                    if (strObj['menuItemData'] != null && strObj['menuItemData'] != '') {
                        alert(strObj['menuItemData']);
                        showmenu_tb.add(eval("(" + strObj['menuItemData'] + ")"));
var showmenu_tb1 = Ext.getCmp('toolbar');
             var showmenu_tbItems1 = showmenu_tb.items;
alert(showmenu_tbItems1.length);
                    }
                }
            });
        }
我想通过异步方式查出toolbar里面的菜单,结果始终显示最后一个菜单,当我var showmenu_tb1 = Ext.getCmp('toolbar');
             var showmenu_tbItems1 = showmenu_tb.items;
alert(showmenu_tbItems1.length);又确实打出有多条。请问各位,这是什么原因?

解决方案 »

  1.   

    showmenu_tb.add(eval("(" + strObj['menuItemData'] + ")"));
    改成
    showmenu_tb.add(eval("{" + strObj['menuItemData'] + "}"));
    "()"-->"{}"是否可行?
      

  2.   

    你要在循环里面new item要不然你在循环外面new的话当然只会显示最后一个
      

  3.   

    问题解决了!我认为主要是ajax异步原因,
    创建toolbar后,后台数据并没有读取。等读取后台数据后,再赋值就晚了。
    我改了一下代码如下,就OK了!
    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.add(arrays);
                tbr.addFill();
                tbr.addButton(
                {
                    text: '我的桌面',
                    iconCls: 'icon-desktop',
                    scope: this
                });
                tbr.addSeparator();
                tbr.addButton([
                {
                    text: '重新登录',
                    iconCls: 'icon-user'
                },
                {
                    text: '退出系统',
                    iconCls: 'icon-exit'
                }]);
            },
            failure: function() {
                Ext.Msg.alert("提示信息", "按钮加载失败,请稍后重试!");
            }
        });
    };Ext.onReady(function() {
        Ext.QuickTips.init();
        var toolbar = new Ext.Toolbar({
            id: 'tool_bar',
            cls: 'top-toolbar'
        });
        SetToolButtons(toolbar);
    }
    希望对大家有帮助!