Как я могу получить каждую строку таблицы?
Я делаю аппликацию корд-ридера на титановом сплаве.
Мне удалось сделать просмотр таблицы и вставить строки. тогда я могу нажать на каждый ряд.
Однако я не уверен, как получить атрибуты каждой строки.
пожалуйста, посмотрите места.
// как я могу получить заголовок // как я могу получить ссылку?
Я разработал некоторые приложения на титановой старой версии, но до сих пор не могу привыкнуть к сплаву.
большое спасибо.
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;
Тогда в вашем 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] }
Я добавил общий код, потому что ваш веб-сервис не работал. Чтобы использовать rowData, вам нужно установить объект row внутри вашего контроллера строк. Ниже приведен пример рабочей версии.
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>