2013-02-15 39 views
1

我想创建我的json数据的详细视图。我不确定如何真正接近它。我有eventlistener,但我不确定如何根据所选栏的名称来提取数据。这里是我的JSON拉:Titanium Mobile行数据的详细视图

var win =Titanium.UI.currentWindow; 

var data = []; 

var xhr = Titanium.Network.createHTTPClient(); 

var barList = Titanium.UI.createTableView({ 
    height:366, 
    width: 320, 
    top:0, 
    left:0 
}); 

win.add(barList); 

xhr.onload = function() { 
    var json = JSON.parse(this.responseText); 
    Ti.API.info(json.length); 
    for (var i = 0; i < json.length; i++) { 

     var row = Titanium.UI.createTableViewRow({ 
      hasChild: true, 
      className: 'bar-row', 
      filter: json[i].bar.name 
     }); 
     var titleLabel = Titanium.UI.createLabel({ 
      text: json[i].bar.name, 
      font: { 
       fontSize: 14, 
       fontWeight: 'bold' 
      }, 
      left: 70, 
      top: 5, 
      height: 20, 
      width: 210 
     }); 
     row.add(titleLabel); 
     var addressLabel = Titanium.UI.createLabel({ 
      text: json[i].bar.address, 
      font: { 
       fontSize: 10, 
       fontWeight: 'normal' 
      }, 
      left: 70, 
      top: 25, 
      height: 40, 
      width: 200 
     }); 
     row.add(addressLabel); 
     var iconImage = Titanium.UI.createImageView({ 
      text: json[i].bar.logo_file_name, 
      width: 50, 
      height: 50, 
      left: 10, 
      top: 10 
     }); 
     row.add(iconImage); 
     data.push(row); 

     row.addEventListener('click',function(e){ 
     var detail = Ti.UI.createWindow({ 
      title: e.rowData.title 
     }); 

    detail.open({modal: true}); 

}) 

    } 
    barList.data = data; 



}; 


xhr.open('GET', 'http://site.com/db.json'); 

xhr.send(); 

JSON数据: 我期待拉名称,描述,mon_special,tues_special等,为酒吧选择

http://pastie.org/private/eyp9m5il6hrulbds76a8q

回答

1

的最简单方法要做到这一点是数据附加到你创建的行:

var row = Titanium.UI.createTableViewRow({ 
    hasChild: true, 
    className: 'bar-row', 
    filter: json[i].bar.name, 
    barData : json[i].bar 
}); 

然后通过事件侦听器访问加入的TableView本身(不要使用该事件的rowData对象,如果您已经创建了该行本身)我的事件侦听器添加到表

barList.addEventListener('click', function(e) { 
    // Get the row clicked, then get our custom attribute 
    var passedJSONBarData = e.row.barData; 
    // Now pass along through the window, or build the window here 
    var detail = Ti.UI.createWindow({ 
     title: passedJSONBarData.title, 
     barData : passedJSONBarData 
    }); 

    detail.open({modal: true}); 
}); 

所以,我们只创造,一旦你的功能使用这种方法可以节省一些性能/内存。

+0

所以我得到这个错误时,我所做的更改: '[错误]:脚本错误=尝试开始从一个模式过渡而转变已在进行中。等待viewDidAppear/viewDidDisappear以知道当前转换已经在bars.js(第70行)完成了.' – 2013-02-16 17:22:56

+0

这是我所做的更改: 'var row = Titanium.UI.createTableViewRow {{hasChild:true, className: 'bar-row', filter:json [i] .bar.name, barData:json [i] .bar.address });' – 2013-02-16 17:24:05

+0

这不是来自于这种改变。我敢打赌,你并没有从行中移除事件监听器,所以现在你有两个'click'事件触发。从循环中删除'addEventListener'。 – 2013-02-16 17:37:22