从action传进一个json格式的字符串到界面,界面做完特殊符号处理后,用eval()方法转化为一个对象,代码如下:var monitorlist = '<%=monitor_list%>';
monitorlist = eval(monitorlist);接着用遍历的方式获取到list中的每个monitor,代码如下:var monitorListCount = monitorlist.length;
var monitorListNum = parseInt(monitorListCount,10);
var monitorBtnArr = new Array();
for(i = 0; i < monitorListNum*2; i++)
{
    var monitor = monitorlist[i];
    alert(monitor.monitorID);
    alert(monitor.monitorName);
    var btn = new Ext.Button({
         id : monitor.monitorID,
         text : monitor.monitorName,
         disabled : false
    });
}接着在下面的button组件中,获取每个monitor对象的monitorID和monitorName属性值,其实在定义button组件前的两个alert中已经可以取到monitorID和monitorName的值了,但是页面中还是报:'monitorID' 为空或不是对象,让我甚是郁闷啊,有哪位大侠也遇到过类似的问题啊,有谁知道EXT这里有暗藏什么玄机啊,好奇怪!

解决方案 »

  1.   

    确实很奇怪。
    把monitor.monitorID在赋给一个变量, 然后new Ext.Button里面用那个新变量试试。
    死马当活马办了。
      

  2.   

    我没有去重试你的代码,不过据你所说,既然你已经获取到了monitor.monitorID的值,那么如果你要继续在循环里创建button组件,你可以将创建button的代码写进一个function里面,然后将monitor.monitorID作为此function的参数再传给Ext.Button.代码如下:function createButton(monitorId){
         var btn = new Ext.Button({
        id : monitorId,
        text : 'DIY',
        disabled : false
        });}
    for(i = 0; i < monitorListNum*2; i++)
    {
      var monitor = monitorlist[i];
      alert(monitor.monitorID);
      alert(monitor.monitorName);
      createButton(monitor.monitorID)
      
    }
      

  3.   


    这个办法确实可以,呵呵!
    但是不能写成像我上面那样,创建按钮时,那个id,name不能使用太直接的变量,你这种方式也是变量却可以,有待研究啊!