2014-02-07 56 views
2

我正在對鈦合金進行讀卡器應用。如何獲得tableview的每一行?

我成功地進行了表格視圖和插入行。 然後我可以點擊每一行。

但是我不知道如何獲得每行的屬性。

請看地方。

//如何獲得標題 //我如何獲得鏈接?

我已經開發了一些鈦舊版本的應用程序,但仍不能適應合金。

非常感謝。

index.js

if(!Ti.Network.online) { 
    alert('Not online.'); 
} 
var xhr = Ti.Network.createHTTPClient(); 

url = 'http://testsite.com.jp/testfeed.xml'; 

xhr.open('GET', url); 

xhr.onload = function() { 
    Ti.API.info('onload()'); 
    try{ 
     var doc = this.responseXML.documentElement; 
     var items = doc.getElementsByTagName('item'); 
     for (var i = 0; i < items.length;i++){ 
      var title = items.item(i).getElementsByTagName('title').item(0).text; 
      var link = items.item(i).getElementsByTagName('link').item(0).text; 
      bgcolor = true; 
      var row = Alloy.createController("row",{ 

       id: i+1, 
       title: title, 
       link: link, 
       bgcolor: bgcolor 
      }).getView(); 
      $.tableByFav.appendRow(row);   
     } 
    }catch(e){alert(e);} 
} 
try{ 
    xhr.send(); 
}catch(e) {alert(e); 
} 


$.tableByFav.addEventListener('click',function(e){ 
    Ti.API.info(e.rowData.title);//it shows null, how can I get the title? 
    Ti.API.info(e.rowData.linkData);// it shows null, how can I get the link? 
}) 
$.index.open(); 

row.js

var args = arguments[0] || {}; 

$.row.backgroundColor = args.bgcolor ? "#faf8f5" : "#eee4db"; 

$.title.text = args.title; 
$.linkData = args.link; 

INDEX.XML

<Alloy> 
    <TabGroup backgroundColor="white" > 
     <Tab id="byFav" title="fav" icon="KS_nav_views.png"> 
      <Window> 
       <TableView id="tableByFav" /> 
      </Window> 
     </Tab> 
     <Tab id="byDate" title="log" icon="KS_nav_views.png"> 
      <Window> 
       <TableView id="tableByDate" /> 
      </Window> 
     </Tab> 
     <Tab id="byCat" title="cat" icon="KS_nav_views.png"> 
      <Window> 
       <TableView id="tableByCat" /> 
      </Window> 
     </Tab> 
    </TabGroup> 

</Alloy> 

row.xml

<Alloy> 
  <TableViewRow id="row"> 
    <Label id="title">Menu</Label> 
    <ImageView id="image" image="/image1.jpg" /> 
  </TableViewRow> 
</Alloy> 

回答

2

當您使用Alloy時,您必須記住,傳遞給eventListeners的對象仍然是普通的Titanium對象。要實現類似的東西,你需要嘗試這個東西:

在row.js添加一行:

$.row.args = args; 

然後在你的事件監聽你可以試試這個:

$.tableByFav.addEventListener('click',function(e){ 
    Ti.API.info(e.row.args); 
}); 

將輸出到控制檯類似於這個JSON:

[INFO] { 
[INFO]  bgcolor = 1; 
[INFO]  id = 1; 
[INFO]  link = "http://test1.com"; 
[INFO]  title = "Test 1"; 
[INFO] } 
+0

謝謝你,你給我完美的答案! – whitebear

0

我添加了一些通用代碼,因爲您的Web服務w因爲不工作。要使用rowData,您需要在行控制器中設置行對象。以下是一個示例工作版本。

index.js

var data = []; 
for (var x = 0; x < 10;x++){  
    var args = { 
     id: x, 
     title: 'my Title', 
     image: 'my image url' 
     }; 

    var row = Alloy.createController("row", args).getView(); 
    data.push(row);  
} 
$.tableByFav.setData(data); 

$.tableByFav.addEventListener('click',function(e){ 
    Ti.API.info(e.rowData.id); 
    Ti.API.info(e.rowData.title); 
    Ti.API.info(e.rowData.image); 
}) 
$.index.open(); 

row.js

var args = arguments[0] || {}; 

$.row.id = args.id; 
$.row.title = args.title; 
$.row.image = args.image; 

row.xml

<Alloy> 
  <TableViewRow id="row"> 
    <Label id="title"/> 
    <Label id="image"/> 
  </TableViewRow> 
</Alloy> 
相關問題