Javascript 如何删除WinJS组绑定列表的最后一项
我正在用WinJS编写一个Windows8应用程序。我使用的是分组绑定列表Javascript 如何删除WinJS组绑定列表的最后一项,javascript,list,windows-8,binding,winjs,Javascript,List,Windows 8,Binding,Winjs,我正在用WinJS编写一个Windows8应用程序。我使用的是分组绑定列表 var groupedSortedListProjection = list.createGrouped(groupKey, groupData, groupSorter); 这将有两个组,键为“do”和“done”。因此,当用户单击组“doing”中的项目时,一个项目将添加到“done”中 我试图将“完成”组中的项目数限制为仅5项。因此,每次将新项目添加到组“完成”时,最后一个(最早的)项目将被删除。我需要一个索引来
var groupedSortedListProjection = list.createGrouped(groupKey, groupData, groupSorter);
这将有两个组,键为“do”和“done”。因此,当用户单击组“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连接数据:
谢谢你的阅读。我希望我的问题足够清楚。如果您需要更多信息,请告诉我,我将发布更多信息。删除最早完成的任务的一种方法是将
finishTime
添加到项目中,并将其作为排序键的一部分。这样-最旧的项目可以在列表的末尾找到。需要在投影中基于此键进行排序
此后,需要使用投影对项目进行分组并对组进行排序
要在处理程序中修改和删除该项
有关完整的详细信息和代码列表,请参阅。您可以使用列表上的splice方法(),该方法的操作方式类似于数组。找到要删除的项目的索引后,只需说:
groupedSortedListProjection.splice(index, 1);
为了找到索引,您可以询问组,或者在您的情况下,因为您知道“完成”组是第二个组,并且是集合中的最后一个组,那么该组中的最后一个元素也将方便地成为集合中的最后一项,您的代码是:
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);
var groups=groupedSortedListProjection.groups;
变量组={};//从空对象开始,以简化for循环条件
对于(变量i=0;i
希望有帮助
-joshSry,我点击了一下“回车”,然后在我完成之前就发布了。嗨,苏西,谢谢你的帖子。你的代码块很聪明。我一点也不认识。就像使用“selectionMode”禁用右键单击一样。但是,我遇到了一个关于Minvoke函数的问题。按照您编写的方式,当用户单击“完成”组中的某个项目时,它仍将被调用,最后一个项目将被删除。因此,我添加了if(item.status=='todo){},以仅调用'todo'项。你知道有什么方法可以真正改进它吗?谢谢这看起来没问题,因为点击“完成”项目应该是一个noop。根据此更新帖子中的代码。您好,谢谢您的回复。我尝试了您的方法:“groupedSortedListProjection.splice(索引,1);”然而,它没有起作用。我的“完成”组的最后一项的索引通常为“0”或“1”,并且不断增加。随着“完成”组的长度增加,当一项新任务完成时,最后一项的索引不起作用,因此它不起作用。另一个问题是,您知道Binding.list的索引是如何工作的,比如添加一个新项时,它会更改每个项的索引还是只更改新添加的项的索引?我查过了,但我不太明白。谢谢:)