如何获得每一行tableview?

时间:2014-02-07 08:57:37

标签: titanium titanium-alloy

我正在使用钛合金制作饲料阅读器。

我已成功制作表格视图并插入行。 然后我可以点击每一行。

但是我不知道如何获得每行的属性。

请看地方。

//我怎样才能获得头衔 //我怎样才能获得链接?

我开发了钛旧版本的一些应用,但仍然不能习惯合金。

非常感谢。

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 个答案:

答案 0 :(得分:2)

当您使用Alloy时,您必须记住传递给eventListeners的对象仍然是普通的Titanium对象。为了实现类似于你需要的东西,试试这个:

在row.js中添加一行:

$.row.args = args;

然后在你的eventListener中你可以试试这个:

$.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]  }

答案 1 :(得分:0)

我添加了一些通用代码,因为您的网络服务无效。要使用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>