Как я могу получить каждую строку таблицы?

Делаю приложение для чтения лент на титановом сплаве.

Мне удалось создать представление таблицы и вставить строки. тогда я могу коснуться каждой строки.

Однако я не уверен, как получить атрибуты каждой строки.

пожалуйста, смотрите места.

// как я могу получить заголовок // как я могу получить ссылку?

Я разработал некоторые приложения на старой версии титана, но все еще не могу привыкнуть к сплаву.

большое спасибо.

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();

строка.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>

строка.xml

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

person whitebear    schedule 07.02.2014    source источник


Ответы (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]  }
person daniula    schedule 07.02.2014
comment
Спасибо, вы даете мне идеальный ответ! - person whitebear; 07.02.2014

Я добавил общий код, потому что ваш веб-сервис не работал. Чтобы использовать 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();

строка.js

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

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

строка.xml

<Alloy>
  <TableViewRow id="row">
    <Label id="title"/>
    <Label id="image"/>
  </TableViewRow>
</Alloy>
person Nando    schedule 07.02.2014