日期:2014-05-16  浏览次数:20364 次

关于ext,'monitorID' 为空或不是对象,大家有没有遇到类似的问题啊?
从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这里有暗藏什么玄机啊,好奇怪!

------解决方案--------------------
确实很奇怪。。。。
把monitor.monitorID在赋给一个变量, 然后new Ext.Button里面用那个新变量试试。
死马当活马办了。
------解决方案--------------------
我没有去重试你的代码,不过据你所说,既然你已经获取到了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)
  
}