【问题标题】:How can I get each rows of tableview?我怎样才能得到每一行的tableview?
【发布时间】:2014-02-07 08:57:36
【问题描述】:

我正在钛合金上制作提要阅读器应用程序。

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

但是我不确定如何获取每行的属性。

请查看地点。

// 如何获得标题 // 如何获取链接?

我已经在钛老版本上开发了一些应用程序,但仍然无法适应合金。

非常感谢。

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>

行.xml

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

【问题讨论】:

    标签: titanium titanium-alloy


    【解决方案1】:

    当您使用 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]  }
    

    【讨论】:

    • 谢谢,你给了我完美的答案!
    【解决方案2】:

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

    行.xml

    <Alloy>
      <TableViewRow id="row">
        <Label id="title"/>
        <Label id="image"/>
      </TableViewRow>
    </Alloy>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      相关资源
      最近更新 更多