我正在创建一个应用程序,它将在tableView中显示所有用户数据 在点击特定记录时,用户的完整数据应该是 得到显示。数据是json对象响应。我试过了 下面的代码,它完美地工作直到第一个表,记录得到 以表格格式显示但当我点击记录时显示错误。 我已经为这些
编写了以下代码var tableData = [];
var tableView = Ti.UI.createTableView();
function srch() {
var client=Ti.Network.createHTTPClient({
onload: function(e){
var obj=JSON.parse(this.responseText);
var deal, deals, row, nameLabel, skillkLabel ;
for(var i=0 ; i < obj.entities.length ; i++) {
deal=obj.entities[i];
row = Ti.UI.createTableViewRow({
height : 'auto',
hasChild : true
});
nameLabel= Ti.UI.createLabel({
text : deal.name,
font : { fontSize : '16dp', fontWeight : 'bold'},
height : 'auto',
left : '10dp',
color : '#000',
top : '5dp',
touchEnabled: false
});
skillkLabel = Ti.UI.createLabel({
text : deal.skill,
font : { fontSize : '16dp'},
height : 'auto',
left : '150dp',
color : '#000',
bottom : '0dp',
touchEnabled: false
});
row.add(nameLabel);
row.add(skillkLabel);
tableData.push(row);
}
tableView.setData(tableData);
window2.add(tableView);
window2.open();
},
}
tableView.addEventListener('click', function(e){
viewDetails(e.rowData.tableData);
});
function viewDetails(data) {
var self =Ti.UI.createWindow({
backgroundColor : '#fff',
});
var detailData = [];
var detailTable= Ti.UI.createTableView();
var detailRow =Ti.UI.createTableViewRow();
var name= Ti.UI.createLabel({
text : data.nameLabel,
top : '10dp',
left : '10dp'
});
detailRow.add(name);
var skill =Ti.UI.createLabel({
text : data.skillkLabel,
top : '30dp',
left : '10dp'
});
detailRow.add(skill);
var city = Ti.UI.createLabel({
text : data.city,
top : '60dp',
left : '10dp'
});
detailRow.add(city);
detailData.push(detailRow);
detailTable.setData(detailData);
self.add(detailTable);
self.open();
}
执行viewDetails()函数时,会出现错误 text:data.nameLabel,未定义。所以任何人都可以帮助我们。
修改的 这是完整的错误日志:
[ERROR] : TiExceptionHandler: (main) [13953,13953] ----- Titanium Javascript Runtime Error -----
[ERROR] : TiExceptionHandler: (main) [2,13955] - In app.js:566,15
[ERROR] : TiExceptionHandler: (main) [35,13990] - Message: Uncaught TypeError: Cannot read property 'nameLabel' of undefined
[ERROR] : TiExceptionHandler: (main) [2,13992] - Source: text : data.nameLabel,
[ERROR] : V8Exception: Exception occurred at app.js:566: Uncaught TypeError: Cannot read property 'nameLabel' of undefined
答案 0 :(得分:0)
在您的情况下,您应该访问该行的子项。
您正在做的是访问 tableData ,它不是行的属性,只是用于存储行的变量。在你的情况下没有用的东西,因为你将行数组分配给函数 srch()中的tableView,可能你再也不会使用它了。因此,您可以在 srch ()中移动 tableData 变量。
它的外观应如下所示,尝试打印 e.row() 包含的内容,并访问他的孩子。
tableView.addEventListener('click', function(e){
Ti.API.info(JSON.stringify(e.row));
viewDetails(e.row);
});
function viewDetails(data) {
var name = data.children[0].text;
var skill = data.children[1].text;
}
我认为你在这里缺少的是:
row.add(nameLabel);
名称标签不是行的属性,只是一个变量(对所有其他变量都相同)。您只能访问字体,文字,高度等