2016-04-04 2 views
0

Я использую NativeScript <ListView>, и я пытаюсь получить доступ к отдельным элементам в каждом элементе <ListView.itemTemplate>. Чтобы дать конкретный пример, учитывая этот фрагмент кода, как мне получить доступ к каждому <GridLayout>?Доступ к элементу списка элементов NativeScript Содержимое шаблона

<ListView> 
    <ListView.itemTemplate> 
    <GridLayout>...</GridLayout> 
    </ListView.itemTemplate> 
</ListView> 

Я знаю, что я могу добавить событие loaded к каждому <GridLayout> -i.e. <GridLayout loaded="myEventHandler"> -however, для моего варианта использования мне нужно изменить атрибуты на <GridLayout> после возникновения события, не связанного с ним.

Теоретически я мог бы использовать событие loaded для построения массива всех <GridLayout> s в <ListView.itemTemplate>, а затем использовать этот массив для выполнения действий, но это просто кажется взломанным. Кажется, должен быть лучший способ. Есть идеи?

+0

Следует отметить, что я пробовал превосходный плагин nartsana-dom Nathanael (https://github.com/nathanaela/nativescript-dom). Однако даже при таком подходе содержимое шаблонов вообще не доступно. –

ответ

1

Вы можете использовать плагин nativescript-dom. У getElementsByClassName на самом деле есть код для перемещения пользователей ListView. К сожалению, после того, как я обнаружил проблему и включил отчет об ошибке в репозиторий NS Common Components, я полностью забыл внести те же изменения в функции getElementsByTagName и getElementById в плагине nativescript-dom.

Таким образом, используя getElementsByClassName, если вы назначаете его, имя класса должно работать прямо сейчас. В противном случае; Я, вероятно, сделаю обновление библиотеки позже на этой неделе, в котором будет использоваться код обхода дочерних элементов listview для двух других методов.

Обновление: Я выпустил новую версию nativescript-dom, которая позволяет всем трем getElement * работать с детьми ListView.

0

Я думаю, что вы можете дать каждому gridview и id динамически, используя что-то вроде id = "gridView {{$ index}}", а затем используйте page.getViewById ('gridView1'). Не могу проверить это на данный момент, но я думаю, что это сработает.

+0

Это умная идея, но, к сожалению, она не работает. Если я попробую 'getElementById', он не сможет найти элементы в шаблонах. Это похоже на то, что они вообще не находятся в визуальном дереве. –

3

Манипулирование визуальным деревом для элемента просмотра списка не похоже на самый надежный подход здесь. Рассмотрим следующий сценарий:

  1. Элемент получает визуализированный на экран.
  2. Ваш код запускает и изменяет дерево визуального контейнера.
  3. Пользователь прокручивает или что-то еще происходит, и просмотр списка повторно использует визуальный контейнер для другого элемента. Теперь ваш новый элемент выглядит сломанным.

Я бы реализовал это с помощью привязок и, если что-то получилось волосатое, подходящая модель обзора, которая делает привязки простыми.

Смежные вопросы