将控制器添加到 ListView 模板
Add controllers to ListView Template
我有一个 ListView,但我需要向每个 ListItem 添加单元格,我永远不知道我需要添加多少单元格,这可能吗?
我无法向模板内的 ListItem 添加视图,我在 ListItem 元素上的 id 和 bindId 等于 'row'。
我能想到的唯一其他解决方案是拥有大约 12 个单元格,并隐藏我不需要的单元格。
//widget.xml
<Alloy>
<View id="widget">
<ListView id="list" defaultItemTemplate="list">
<Templates>
<ItemTemplate name="list" bindId="row" id="row"/>
</Templates>
<ListSection/>
</ListView>
</View>
</Alloy>
我有一个包含要添加到每个单元格的 bindId 的数组:
//cell.js
$.title.bindId = args.cell;
//cell.xml
<Alloy>
<View id="cell">
<Label id="title"/>
</View>
</Alloy>
我有 12 个单元格,宽度设置为 0,我只设置我正在使用的列的宽度,其他列保持隐藏状态。这是我的实际文件:
<ListView id="list" defaultItemTemplate="item">
<Templates>
<ItemTemplate name="item" class="item" id="item" bindId="item">
<View id="row" bindId="row">
<View class="cell" bindId="cell1" id="cell1">
<View class="border left"/>
<Label class="title" bindId="title1" id="title1"/>
<View class="border right"/>
<View class="line"/>
</View>
....
<View class="cell" bindId="cell12" id="cell12">
<View class="border left"/>
<Label class="title" bindId="title12" id="title12"/>
<View class="border right"/>
<View class="line"/>
</View>
</View>
</ItemTemplate>
</Templates>
<ListSection/>
</ListView>
这是我的控制器的一部分:
data.items = [];
for(var i = 0; i < 100; i++) if(data.list[i]) {
var row = {
properties:{
searchableText:''
}
};
for(var c in args.columns) {
row.properties.searchableText += data.list[i][args.columns[c].alias]+' ';
row['cell'+parseInt(parseInt(c)+1)] = {
width:data.width
};
row['title'+parseInt(parseInt(c)+1)] = {
text:data.list[i][args.columns[c].alias]
};
}
data.items.push(row);
};
$.list.sections[0].setItems(data.items);
我认为您正在寻找的是 iOS 的 UICollectionView 或 Android 的 GridLayout。您可以使用 Marcel 的模块在 Titanium 中使用它:
https://github.com/mpociot/TiCollectionView
如果您真的必须使用 ListView,那么是的,我认为您提出的几乎是唯一的方法。
我有一个 ListView,但我需要向每个 ListItem 添加单元格,我永远不知道我需要添加多少单元格,这可能吗?
我无法向模板内的 ListItem 添加视图,我在 ListItem 元素上的 id 和 bindId 等于 'row'。
我能想到的唯一其他解决方案是拥有大约 12 个单元格,并隐藏我不需要的单元格。
//widget.xml
<Alloy>
<View id="widget">
<ListView id="list" defaultItemTemplate="list">
<Templates>
<ItemTemplate name="list" bindId="row" id="row"/>
</Templates>
<ListSection/>
</ListView>
</View>
</Alloy>
我有一个包含要添加到每个单元格的 bindId 的数组:
//cell.js
$.title.bindId = args.cell;
//cell.xml
<Alloy>
<View id="cell">
<Label id="title"/>
</View>
</Alloy>
我有 12 个单元格,宽度设置为 0,我只设置我正在使用的列的宽度,其他列保持隐藏状态。这是我的实际文件:
<ListView id="list" defaultItemTemplate="item">
<Templates>
<ItemTemplate name="item" class="item" id="item" bindId="item">
<View id="row" bindId="row">
<View class="cell" bindId="cell1" id="cell1">
<View class="border left"/>
<Label class="title" bindId="title1" id="title1"/>
<View class="border right"/>
<View class="line"/>
</View>
....
<View class="cell" bindId="cell12" id="cell12">
<View class="border left"/>
<Label class="title" bindId="title12" id="title12"/>
<View class="border right"/>
<View class="line"/>
</View>
</View>
</ItemTemplate>
</Templates>
<ListSection/>
</ListView>
这是我的控制器的一部分:
data.items = [];
for(var i = 0; i < 100; i++) if(data.list[i]) {
var row = {
properties:{
searchableText:''
}
};
for(var c in args.columns) {
row.properties.searchableText += data.list[i][args.columns[c].alias]+' ';
row['cell'+parseInt(parseInt(c)+1)] = {
width:data.width
};
row['title'+parseInt(parseInt(c)+1)] = {
text:data.list[i][args.columns[c].alias]
};
}
data.items.push(row);
};
$.list.sections[0].setItems(data.items);
我认为您正在寻找的是 iOS 的 UICollectionView 或 Android 的 GridLayout。您可以使用 Marcel 的模块在 Titanium 中使用它:
https://github.com/mpociot/TiCollectionView
如果您真的必须使用 ListView,那么是的,我认为您提出的几乎是唯一的方法。