访问NativeScript ListView itemTemplate内容

时间:2016-04-04 13:54:50

标签: nativescript

我正在使用NativeScript <ListView>,我正试图访问每个元素的<ListView.itemTemplate>中的各个元素。举一个具体的例子,给定此代码段,我如何访问每个<GridLayout>

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

我知道我可以为每个loaded添加一个<GridLayout>事件 - 即。 <GridLayout loaded="myEventHandler"> - 但是,对于我的用例,我需要在发生无关事件后更改<GridLayout>上的属性。

理论上我可以使用loaded事件在<GridLayout>中构建所有<ListView.itemTemplate>的数组,然后使用该数组执行操作,但这看起来很糟糕。似乎必须有更好的方法。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

操作列表视图项的可视化树似乎不是最强大的方法。请考虑以下情形:

  1. 项目会呈现在屏幕上。
  2. 您的代码将启动并修改可视容器的树。
  3. 用户滚动或发生其他事情,列表视图会将可视容器重新用于其他项目。你的新商品现在看起来很破碎。
  4. 我使用绑定实现这一点,如果事情变得毛茸茸,那么一个合适的视图模型可以使绑定变得简单。

答案 1 :(得分:1)

您可以使用nativescript-dom插件。 getElementsByClassName实际上有遍历ListView子节点的代码。不幸的是,在我发现问题并将错误报告放入NS Common Components repo之后 - 我完全忘记对nativescript-dom插件中的getElementsByTagName和getElementById函数进行相同的更改。

因此,如果您指定了类名,那么使用getElementsByClassName应该可以立即使用。除此以外;我可能会在本周晚些时候对该库进行更新,这将使listview子代码遍历其中两种方法。

更新:我发布了一个新版本的nativescript-dom,它允许所有三个getElement *在ListView子级上运行。

答案 2 :(得分:0)

我认为您可以使用id =&#34; gridView {{$ index}}&#34;等动态地给每个gridview和id。然后使用page.getViewById(&#39; gridView1&#39;)为例。目前无法对其进行测试,但我认为这样可行。