Titanium Alloy - 更改动态生成的 ListView 元素的属性

Titanium Alloy - Change properties of dynamically generated ListView elements

我正在与 Appcelerator 合作,并且正在开发一项消息传递功能,这是我从我们公司的移动应用程序的前任员工那里获得的。我被要求集成消息删除功能,我采取了添加菜单并允许用户在消息 select 模式和阅读模式之间切换的方式。我在每个消息模板中放置了一个复选框样式开关,并试图在用户从菜单中单击 "Select" 时将开关元素的可见性更改为 true。因为这些元素是动态生成的,所以我不能直接通过id访问这些元素,因为有很多相同的id。我已经广泛寻找解决方案,特别是因为 Titanium 社区非常小。有人知道可能的解决方案吗?

这是我的 XML:

<Alloy>
<Window id='window' >
<Menu id="menu" platform="android">
  <MenuItem id="menuItem1" title="Select" onClick="toggleSelect"/>
  <MenuItem id="menuItem2" title="Delete All" onClick="clearMessages"/>
</Menu>
<View id="ParentViewContainer">
  <ScrollView id="ParentScrollView" layout="vertical">
    <ListView backgroundColor="transparent" id="messageList">
      <Templates>
        <ItemTemplate name="sentTemplate" id="sentTemplate">
          <View class="containerView">
            <View id="sentTemplateView">
              <Switch id="sentSelectSwitch" class="selectSwitch" bindId="sentSelectSwitch" visible="false" value="false" onChange="toggleChecked"/>
              <Label bindId="message" id="message"/>
            </View>
          </View>
        </ItemTemplate>
        <ItemTemplate name="recievedTemplate" id="recievedTemplate">
          <View class="containerView">
            <View id="recievedTemplateView">
              <Switch id="recSelectSwitch" class="selectSwitch" bindId="recSelectSwitch" visible="false" value="false" onChange="toggleChecked"/>
              <Label bindId="message" id="message"/>
            </View>
          </View>
        </ItemTemplate>
      </Templates>
      <ListSection id="listSection">
      </ListSection>
    </ListView>
    <View id="sndView">
      <TextArea id="sndTxt"/>
        <Button id="sndBtn"/>
    </View>
  </ScrollView>
</View>

我会为您的列表创建单独的模板,一个带有可见的复选框,一个不可见。当他们 "go into select mode" 时,您将分配 checkbox-visible 模板。然后,我会在列表中使用 itemclick 事件,并将项目的唯一 ID 推送到数组或其他结构中,然后您稍后会在用户点击“提交”按钮后实际删除这些结构。

ListView UI 元素的目的是减少 JS 和本机代码之间 Kroll Bridge 的使用,因此遍历所有行并调用 updateItemAt 似乎是错误的方法。

我不确定您绘制了多少项,但根据菜单的实现方式,我建议重新创建具有正确 UI(可见或不可见)的列表项可能会更好解决方案。

附带说明一下,在操作列表和滚动视图时遇到相同 ID 的挑战是很常见的,动态唯一 ID 的解决方案如下所示:

var itemCount = 1;
_.each(dataModelObjects, function (_obj) {
    $['wrapper' + itemCount] = $.UI.create('View', { id: 'someIdInTSS'});
    itemCount++;
});