我正在使用钛合金制作饲料阅读器。
我已成功制作表格视图并插入行。 然后我可以点击每一行。
但是我不知道如何获得每行的属性。
请看地方。
//我怎样才能获得头衔 //我怎样才能获得链接?
我开发了钛旧版本的一些应用,但仍然不能习惯合金。
非常感谢。
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>
答案 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>