EXT的动态menu

用ext实现动态menu 我的思路如下:
1:定义一个空的menu var NodeMenu=new Ext.menu.Menu();

2.用ajax从数据库里面去的想要的数据转换成json的格式 ajax的异步代码如下:

    Ext.Ajax.request({
      url:'menu.do',
      success:function(response){
      var menuItem=Ext.decode(response.responseText);//这里返回的是一个json格式的
       NodeMenu.add(menuItem);然后将这个动态的menuItem传递给上面定义的menu
        }
    });

 

 

 

可是我这样定义 子菜单还是为空 menu.do的json转化后的格式为[{id:'1',text:'aa'},{id:'2',text:'bb'}]

是我的json格式错了 还是不应该用add方法 谢谢

 

 

 

 


问题补充:
楼下的两个方法我都试过了 用additem就提示不支持此方法 用那个数组的方法也是错误的 因为menuItem是一个对象类型 根本不是数组呀
问题补充:
我的alert(response.responseText)已经上传  提醒一下 我没有alert(Ext.decode(response.responseText)) 加上ext.decode后 编程object了
问题补充:
按照你这样的写法后 怎么提示了一个错误 render为空或者不是对象 我的菜单已经绑定了的呀 是不是因为刚开始定义了一个空的menu的原因吧
问题补充:
知道原因了 是因为我的var mi = menuItem[i];     的值  我alert了一下 还是undefined 我再看看吧 谢谢大家
问题补充:
var items = menuItem.msg;    
      for(var i =0;i < items.length; i++)    
      {    
        var mi = items[i];    
        NodeMenu.add(mi);    
    
      }    这种方式不行 因为items虽然格式是[{id:'1',text:'aa'},{id:'2'},text:'bb'],但是items[i]的值 是undefind 哎 这不是数组类型吧

看你补充问题中给出的JSON格式,我不知道是不是你输入写错了还是你后台返回的就是那样,把你的JSOn数据规范一下再试试吧。
[quote]
这种方式不行 因为items虽然格式是[{id:'1',text:'aa'},{id:'2'},text:'bb'],//这样的数据不行,
[/quote]

再不行把你后台和前台所有代码贴出来。

addItem

add方法不支持数组:
[code="java"]
...
for(var i = 0;i<menuItem.length;i++)
{
var mi = menuItem[i];
NodeMenu.add(mi);
}
...
[/code]

[code="java"]
...

for(var i = 0;i<menuItem.length;i++)

{

var mi = menuItem[i];

NodeMenu.add(mi);
//NodeMenu.addItem(new Ext.menu.Item(mi));

//NodeMenu.addMenuItem(mi);

}

...

[/code]

alert(response.responseText);
看看结果是不是你说的[{id:'1',text:'aa'},{id:'2',text:'bb'}],如果是,那得到一定是数组,使用for和用add的方法应该可以。
要不你就需要把你的JSON规范点(id和text都用单引号括起来):
[{'id':'1','text':'aa'},{'id':'2','text':'bb'}]

[code="java"]
Ext.Ajax.request({
url:'menu.do',
success:function(response){
var menuItem=Ext.decode(response.responseText);
var items = menuItem.msg;
for(var i =0;i < items.length; i++)
{
var mi = items[i];
NodeMenu.add(mi);
//NodeMenu.addItem(new Ext.menu.Item(mi));

//NodeMenu.addMenuItem(mi);

}
}
});
[/code]

另外你的msg后面的双引号去掉。

不行的话你的success/id/text也用单引号括起来,这样比较规范。

是你的菜单对象还没渲染到页面上吧。

[code="java"]
NodeMenu.on('beforeshow',function(){
Ext.Ajax.request({

url:'menu.do',

success:function(response){

var menuItem=Ext.decode(response.responseText);

var items = menuItem.msg;

for(var i =0;i < items.length; i++)

{

var mi = items[i];

NodeMenu.add(mi);

//NodeMenu.addItem(new Ext.menu.Item(mi));

//NodeMenu.addMenuItem(mi);

}

}

});
});

[/code]