有点抽像,先看代码:
         var menuList = [
        {   
            text: '菜单1',   
         handler: function(){
                 alert("菜单1");
                } 
        }, {   
            text: '菜单2',   
         handler: function() {
                 alert("菜单2");
                }  
        }]; var menu = new Ext.menu.Menu({
listeners: {
   beforerender: function(component, eOpts) 
   {
           for (var i = 0; i < menuList.length; i++){
           component.add(menuList[i]);//增菜单项
           }
    }
}
});我要实现点菜单1时,提示菜单1,如果单纯是这样写死的本地代码,是没问题的,但如今,我的menuList是从后台传过来的,后台的就是用json的数组对象,
JsonObject jsonObject = new JsonObject();

jsonObject .addProperty("text", "test1");
jsonObject .addProperty("handler", "function(){alert(\"菜单\");}");//这个写法不对,没效果,不知道要怎么写呢?很是奇怪,这里值要必需是字符串,但要没效果,请高人指点
jsonArray.add(jsonObject );

解决方案 »

  1.   

    jsonObject .addProperty("handler", "function(){alert(\"菜单\");}")最后传递到客户端后函数应该是字符串,而不是实际的js函数,你需要再eval下一次handler获取真正的函数。如下这样var s='{"text":"test1","handler":"function(){alert(\\"菜单\\");}"}';//最终客户端字符串差不多这个个样子
    alert(s)
    var o=eval('('+s+')')
    alert(typeof o.handler)//输出string,不是function,所以需要再eval一次
    o.handler=eval('('+o.handler+')')
    alert(typeof o.handler)//输出function
    o.handler()