带有数据收集的Titanium ListView

时间:2014-07-19 10:26:49

标签: android ios listview titanium titanium-alloy

在我的钛应用程序中,我必须显示元素列表,为此我使用以下视图:

<Alloy>
    <Collection src="featuredEvents"/>
    <Window id="win" class="container" navBarHidden="true" exitOnClose="true" onOpen="showIndicator">
      <View id="navView"></View>
      <ActivityIndicator id="activityIndicator" message="L('loading')" />

            <TableView id="featuredEvents" dataCollection="featuredEvents" dataFilter="filterEvents" opacity="0" class="list">
                <TableViewRow eventId="{alloy_id}"  onClick="showEvent">
                    <View class="event-wrapper">
                        <ImageView image="{img}" eventId="{alloy_id}"  defaultImage="/img/loading.jpg"/>
                        <View class="eventImageOverlayYellow" eventId="{alloy_id}">
                            <Label id="eventName" text="{name}" eventId="{alloy_id}" />
                            <View id="eventTypeContainer" class="iconedLabelBig">
                                <ImageView image="{icon}" class="iconBig" />
                                <Label id="eventType" text="{type}" eventId="{alloy_id}" />
                            </View>
                        </View>
                    </View>
                </TableViewRow>
            </TableView>
    </Window>
</Alloy>

它运行正常但是android的性能非常差,所以我想用ListView而不是TableView重写相同的列表。 这就是我想出的:

<Alloy>
    <Collection src="featuredEvents"/>
    <Window id="win" class="container" navBarHidden="true" exitOnClose="true" onOpen="showIndicator">
      <View id="navView"></View>
      <ActivityIndicator id="activityIndicator" message="L('loading')" />

            <ListView id="featuredEvents" dataCollection="featuredEvents" dataFilter="filterEvents" opacity="0" class="list">
                <ListSection eventId="{alloy_id}"  onClick="showEvent">
                    <ListItem class="event-wrapper">
                        <ImageView image="{img}" eventId="{alloy_id}"  defaultImage="/img/loading.jpg"/>
                        <View class="eventImageOverlayYellow" eventId="{alloy_id}">
                            <Label id="eventName" text="{name}" eventId="{alloy_id}" />
                            <View id="eventTypeContainer" class="iconedLabelBig">
                                <ImageView image="{icon}" class="iconBig" />
                                <Label id="eventType" text="{type}" eventId="{alloy_id}" />
                            </View>
                        </View>
                    </ListItem>
                </ListSection>
            </ListView>
    </Window>
</Alloy>

我的控制器index.js:

function showIndicator(e){}
$.win.open();

当我运行它时,我收到以下错误:

Location:
alloy/controllers/index.js

Message:
Uncaught typeError: cannot read property '_transform' of null

Source:
title:"undefined" != typeof $model__transform["name"] ? $model._

- 是否有合并数据集合组合使用的ListView示例?

- 知道这个错误意味着什么吗?

1 个答案:

答案 0 :(得分:1)

我今天一直在与ListView挣扎,所以我不是专家,但也许我可以提供帮助。我在这里阅读了ListViewTableView之间差异的文档:http://docs.appcelerator.com/titanium/3.0/#!/api/Titanium.UI.ListView我也从这个问题得到了很好的帮助,这是ListView的少数例子之一与合金。 Titanium Alloy ListView Nested Model Array of Tags

来自第一个链接的文档:

ListItem对象的创建方式与TableViewRow不同。通过将ListItem个对象数组传递给ListDataItem来创建ListSection

您无法使用add方法向ListItem添加视图,这可以使用TableViewRow来完成。要向ListItem添加视图,您需要定义ItemTemplate,使用模板属性绑定到列表数据项。

您无法为ListItem显式设置属性或绑定事件。您必须使用ListDataItemItemTemplate的属性字典以及ItemTemplateViewTemplate的事件字典来设置它们。

至于你的错误,当我试图将变量直接传递到模板时,我得到了类似的错误,就像TableRow一样。相反,我不得不用额外的属性填充绑定到寺庙的变量。不确定是否推荐,但它有效。