用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方法 谢谢
看你补充问题中给出的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]