2016-01-28 43 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; 
    } 
}