2016-01-28 41 views
0

我正在使用最新的Tianium Appcelerator,我的项目正在使用Alloy。在Titanium Appcelerator中通过ID选择动态生成的元素

我有ID的TableViewtblResults

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

// 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)

我怎样才能在钛Appcelerator的实现这一目标?是否有像jQuery中的某种元素选择器功能?

回答

3

这是我们目前不支持但经常要求的功能。现在,你必须保留id - > view reference的哈希值并且以这种方式查找它。但是,我在这里开了一个功能请求https://jira.appcelerator.org/browse/TIMOB-20286

+0

我同意;我们绝对需要这个功能。我以为我错过了一些显而易见的东西,试图用Google搜索如何做到这一点,并不断得到错误的结果。 – Latheesan

0

如果你有行的选择方法,你可以这样做:

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

    if(e.row.select) e.row.select(); 
    //or 
    if(rows[e.index]) rows[e.index].select(); 
}); 
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; 
    } 
}