Добавление нескольких TextView в CollectionView в Tabrisjs
Я могу легко добавлять виджеты в CollectionView, но не могу добавить больше одного типа виджетов. Я пытаюсь добавить 2 TextView. Вот что я получил, он только дважды выводит firstName. (это работает на детской площадке)
Кроме того, возможно ли добавить события для каждого TextView? лайк:.on('tap', () => {
Я вижу, как .on('select',
работает, в представлении коллекции, но я хочу добавить событие для каждого отдельного TextView
Благодарю.
// Create a collection view, initialize its cells and fill it with items
const {CollectionView, Composite, ImageView, TextView, ui} = require('tabris');
let people = [
['Bob', 'Smith',],
['Fred', 'Jones'],
['James', 'Mackay'],
].map(([firstName, lastName]) => ({firstName, lastName}));
new CollectionView({
left: 0, top: 0, right: 0, bottom: 0,
itemCount: people.length,
cellHeight: 56,
createCell: () => {
let cell = new Composite();
new TextView({
left: 30, top: 10,
alignment: 'left'
})
.appendTo(cell);
let txvLastName = new TextView({
left: 50, top: 25,
alignment: 'right'
})
.appendTo(cell);
return cell;
},
updateCell: (cell, index) => {
let person = people[index];
cell.apply({
TextView: {text: person.firstName},
txvLastName: {text: person.lastName},
});
}
}).on('select', ({index}) => console.log('selected', people[index].firstName))
.appendTo(ui.contentView);
1 ответ
Метод apply использует селектор виджетов, который работает аналогично селекторам CSS и документирован по вышеупомянутой ссылке. Вы ссылаетесь на переменную JavaScript, которая не поддерживается и не входит в область действия updateCell
функция обратного вызова.
Я бы обновил ваш createCell
обратный вызов, так что каждый из элементов имеет отдельный класс и ссылаться на него в updateCell
Перезвоните:
createCell: () => {
let cell = new Composite();
new TextView({
left: 30, top: 10,
class: 'firstName',
alignment: 'left'
}).appendTo(cell);
new TextView({
left: 50, top: 25,
class: 'lastName',
alignment: 'right'
}).appendTo(cell);
return cell;
},
updateCell: (cell, index) => {
let person = people[index];
cell.apply({
'.firstName': {text: person.firstName},
'.lastName': {text: person.lastName},
});
}