如何删除WinJS组绑定列表的最后一项

时间:2013-12-03 01:12:06

标签: javascript list windows-8 binding winjs

我正在用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连接数据:

感谢您的阅读。我希望我的问题很清楚。如果您需要更多信息,请告诉我,我会发布更多信息。

2 个答案:

答案 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