我正在用WinJS编写Windows 8应用程序。我正在使用分组绑定列表
var groupedSortedListProjection = list.createGrouped(groupKey, groupData, groupSorter);
将有两个组,其中包含'doing'和'done'键。因此,当用户点击“正在进行”组中的项目时,项目将被添加到“完成”。
我试图将“完成”组中的项目数限制为仅5项。因此,每次将新项目添加到“完成”组时,最后(最旧)项目将被删除。我需要一个索引来做到这一点。但是,我不知道如何到达最后一项的索引。
更重要的是,我在MSDN中找到了这种方法:
List.lastIndexOf
示例是:
var number = list.lastIndexOf(searchElement, fromIndex);
我认为这是答案,但我不知道如何使用这种方法。
这是我的ListView的HTML代码:
<div class="appViewContentMask">
<div class="appViewContent">
<div id="gridViewToDo" data-win-control="WinJS.UI.ListView" data-win-options="{
itemTemplate:select('#toDoTemplate'),
groupHeaderTemplate: select('#headerTemplate'),
layout:{type:WinJS.UI.GridLayout},
itemsDraggable : true,
itemsReorderable : true}"></div>
</div>
</div>
我用Javascript连接数据:
感谢您的阅读。我希望我的问题很清楚。如果您需要更多信息,请告诉我,我会发布更多信息。
答案 0 :(得分:0)
能够删除最早完成的任务的一种方法是将finishTime
添加到项目中并使其成为排序键的一部分。这样 - 最旧的项目可以在列表的末尾找到。基于此密钥的排序需要在createSorted投影中完成。
此后需要使用createGrouped投影对项目进行分组并对组进行排序。
要在iteminvoked处理程序中修改和删除该项目。
有关完整详细信息和代码清单,请参阅here。
答案 1 :(得分:0)
您可以在List上使用拼接方法(http://msdn.microsoft.com/en-us/library/windows/apps/hh700810.aspx),该方法的操作类似于数组。一旦找到要删除的项目的索引,您只需说:
groupedSortedListProjection.splice(index, 1);
为了找到索引,您可以询问该组,或者在您的情况下,因为您知道'done'组是第二个并且是该集合中的最后一个组,那么该组中的最后一个元素也将方便地是最后一个集合中的项目,您的代码是:
var index = groupedSortedListProjection.length - 1;
groupedSortedListProjection.splice(index, 1);
但是,如果它没有那个不变量而必须找到合适的组代码看起来像:
var groups = groupedSortedListProjection.groups;
var group = {}; // start with an empty object to make the for loop condition simpler
for (var i = 0; i < groups.length && group.key !== "done"; i++) {
group = groups.getItemAt(i);
}
var index = group.firstItemIndexHint + group.groupSize - 1;
groupedSortedListProjection.splice(index, 1);
希望有所帮助。
-josh