Выберите динамически сгенерированный элемент по идентификатору в Titanium Appcelerator

Я работаю с последней версией Tianium Appcelerator, и мой проект использует Alloy.

У меня есть TableView с идентификатором: 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 ???
    }
}

Что это будет делать, так это генерировать фиктивный массив объектов. Затем, используя это, заполните представление таблицы строкой, в которой есть представление, внутри нее есть кнопка.

Чего я пытаюсь добиться, так это того, что при нажатии кнопки я хочу выбрать строку таблицы с таким идентификатором:

'row-'+ e.source.btnValue

в чистом стиле javascript/jquery DOM я бы сделал что-то вроде этого:

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

Как я могу добиться этого в Titanium Appcelerator? Есть ли какая-то функция селектора элементов, как в jQuery?


person Latheesan    schedule 28.01.2016    source источник


Ответы (3)


Это очень часто запрашиваемая функция, которую мы в настоящее время не поддерживаем, но должны. Прямо сейчас вам нужно будет сохранить хэш id -> view reference и искать его таким образом. Однако я открыл запрос функции здесь https://jira.appcelerator.org/browse/TIMOB-20286

person jhaynie    schedule 28.01.2016
comment
Я согласен; нам определенно нужна эта функция. Я думал, что упускаю что-то очевидное, пытался найти в Google, как это сделать, и продолжал получать неправильные результаты. - person Latheesan; 28.01.2016

Если у вас есть метод select для строк, вы можете сделать так:

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

    if(e.row.select) e.row.select();
    //or
    if(rows[e.index]) rows[e.index].select();
});
person Ricardo Pereira    schedule 28.01.2016

Для представлений таблиц и списков всегда используйте события click и itemclick в таблице/списке. Эти события предоставляют вам как выбранную строку (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;
    }
}
person Fokke Zandbergen    schedule 01.02.2016