如何通过单击数据在新窗口上显示TableView数据

时间:2015-03-16 12:14:39

标签: javascript json titanium tableview

我正在创建一个应用程序,它将在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

1 个答案:

答案 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);

名称标签不是行的属性,只是一个变量(对所有其他变量都相同)。您只能访问字体,文字,高度等