希望这是有道理的,我正在使用Titanium mobile来构建iPhone应用程序。我有一个包含100个项目的数组,每个项目都有一个DishID和一个DishTitle,我在tableview中显示DishTitle,在事件监听器上我需要传递DishID并在事件监听器上使用提醒它我稍后会做一些事情项目ID到目前为止这是我的代码:
var dishes = eval(this.responseText);
for (var i = 0; i < dishes.length; i++)
{
DishID[i] = dishes[i].DishID;
var row = Ti.UI.createTableViewRow();
row.selectedBackgroundColor = '#fff';
row.height = 30;
row.className = 'datarow';
row.clickName = 'row';
// Create the label to hold the screen name
name[i] = Titanium.UI.createLabel({
color:'#000',
font:{fontSize:16,fontWeight:'bold', fontFamily:'Arial'},
left:5,
top:2,
height:30,
width:200,
text:dishes[i].DishTitle
});
name[i].addEventListener('click', function(e){
alert(DishID[i]);
});
}
我遇到的问题无论我点击哪个标签,我都会获得相同的ID 208,我做错了什么?
答案 0 :(得分:1)
你有一个范围/关闭问题。当“点击”发生时,i = 208。我发现最好将eventListener放在表上,并将自定义属性放在行上:
var table = Ti.UI.createTableView();
var rows = [];
for(var i = 0; i < dishes.length; i++) {
var row = Ti.UI.createTableViewRow({
selectedBackgroundColor : '#fff',
height : 30,
className : 'datarow'
});
row.dishId = dishes[i].DishID;
// Create the label to hold the screen name
var label = Ti.UI.createLabel({
color : '#000',
font : {
fontSize : 16,
fontWeight : 'bold',
fontFamily : 'Arial'
},
left : 5,
top : 2,
height : 30,
width : 200,
text : dishes[i].DishTitle
});
row.add(label)
rows.push(row);
}
table.setData(rows);
table.addEventListener('click', function(e) {
alert(e.row.dishId);
});