访问 NativeScript ListView itemTemplate 内容

Accessing NativeScript ListView itemTemplate contents

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

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

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

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

我想你可以使用 id="gridView{{$index}}" 之类的东西动态地给每个 gridview 和 id 然后使用 page.getViewById('gridView1') 例如。目前无法测试,但我认为可以。

您可以使用 nativescript-dom 插件。 getElementsByClassName 实际上具有遍历 ListView 的子项的代码。不幸的是,在我发现这个问题并将错误报告放入 NS 通用组件存储库之后——我完全忘记了对 nativescript-dom 插件中的 getElementsByTagName 和 getElementById 函数进行相同的更改。

因此,如果您为其指定一个 class 名称,则使用 getElementsByClassName 现在应该可以正常工作。除此以外;我可能会在本周晚些时候对库进行更新,其中将包含用于其他两种方法的列表视图子遍历代码。

更新: 我发布了一个新版本的 nativescript-dom 允许所有三个 getElement* 在 ListView children 上工作。

操作列表视图项的可视化树似乎不是这里最可靠的方法。考虑以下情况:

  1. 一个项目被渲染到屏幕上。
  2. 您的代码启动并修改可视化容器的树。
  3. 用户滚动或发生其他事情,列表视图将视觉容器重新用于另一个项目。您的新商品现在看起来已损坏。

我会使用绑定来实现它,如果事情变得复杂,我会使用一个合适的视图模型来使绑定变得简单。