在Titanium Appcelerator中按ID选择动态生成的元素

时间:2016-01-28 17:33:53

标签: appcelerator appcelerator-titanium appcelerator-alloy

我正在使用最新的Tianium Appcelerator,我的项目正在使用Alloy。

我的TableView ID为tblResults

在我的控制器中,我用这样的行填充此表视图:

// Dummy data
var results = [];
results.push({
    title: 'Hello World',
    value: '123456'
});
results.push({
    title: 'Bye World',
    value: '654321'
});

// Build result data
var resultData = [];
for (var i = 0; i < results.length; i++) {
    resultData.push(createResultRow(
        results[i].title,
        results[i].value
    ));
}

// Method to create result row
function createResultRow(myTitle, myValue) {
    var tableRow = Titanium.UI.createTableViewRow({
        height: 160
        id: 'row-'+ myValue
    });
    var tableRowView = Titanium.UI.createView({
        layout: 'horizontal'
    });
    var myButton = Titanium.UI.createButton({
        title: myTitle,
        btnValue: myValue
    });
    myButton.addEventListener('click', function(e) {
        handleButtonClick(e);
    });
    tableRowView.add(myButton);
    tableRow.add(tableRowView);
    return tableRow;
}

// Set table data
$.tblResults.setData(resultData);

// Method to handle button click
function handleButtonClick(e) {
    if (e.source && e.source.btnValue) {
        // how to select row having a id: 'row-'+ e.source.btnValue ???
    }
}

这将做的是,生成一个虚拟对象数组。然后使用它,用包含视图的行填充表视图,其中有一个按钮。

我想要实现的是,当点击按钮时,我想选择具有如下id的表格行:

'row-'+ e.source.btnValue

在纯javascript / jquery DOM风格中,我会做这样的事情:

$('#row-'+ e.source.btnValue)

如何在Titanium Appcelerator中实现这一目标?是否有某种元素选择器功能,如jQuery?

3 个答案:

答案 0 :(得分:3)

这是我们目前不支持的常用功能,但应该支持。现在,你必须保持id的哈希 - &gt;查看参考并以这种方式查找。但是,我在此处打开了功能请求https://jira.appcelerator.org/browse/TIMOB-20286

答案 1 :(得分:0)

如果行上有select方法,可以这样做:

$.table.addEventListener('click',function(e) {

    if(e.row.select) e.row.select();
    //or
    if(rows[e.index]) rows[e.index].select();
});

答案 2 :(得分:0)

对于表和列表视图,请始终使用表/列表中的clickitemclick事件。这些事件为您提供了所选行(e.row)以及点击的实际视图(e.source)。在所有行的按钮上都有一个监听器也更有效。

您的代码如下:

$.tblResults.addEventListener('click', handleButtonClick); // or bind in XML

// Method to handle button click
function handleButtonClick(e) {

    // user tapped on button
    if (e.source.btnValue) {
        var row = e.row;
    }
}