钛合金 - 更改动态生成的ListView元素的属性

时间:2017-01-19 15:26:05

标签: javascript titanium appcelerator appcelerator-titanium titanium-alloy

我正在与Appcelerator合作,正在研究我从公司移动应用程序中的前任员工那里获取的消息传递功能。我被要求集成一个消息删除功能,我采取了添加菜单的路线,允许用户在消息选择模式和读取模式之间切换。我在每个消息模板中放置了一个复选框样式开关,并且当用户点击"选择"时,我试图将switch元素的可见性更改为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>

2 个答案:

答案 0 :(得分:0)

我会为您的列表创建单独的模板,其中一个复选框可见,一个没有。当他们“进入选择模式”时,您将分配复选框可见模板。然后,我会在列表中使用itemclick事件,并将项目的唯一ID推送到一个数组或其他结构中,然后在用户点击“提交”按钮后,您将稍后执行该实际删除。

答案 1 :(得分:0)

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

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

作为旁注,在操作列表和滚动视图时遇到相同ID的挑战是很常见的,动态唯一ID的解决方案将是这样的:

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