Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何删除WinJS组绑定列表的最后一项_Javascript_List_Windows 8_Binding_Winjs - Fatal编程技术网

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

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项。因此,每次将新项目添加到组“完成”时,最后一个(最早的)项目将被删除。我需要一个索引来

我正在用WinJS编写一个Windows8应用程序。我使用的是分组绑定列表

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
希望有帮助


-josh

Sry,我点击了一下“回车”,然后在我完成之前就发布了。嗨,苏西,谢谢你的帖子。你的代码块很聪明。我一点也不认识。就像使用“selectionMode”禁用右键单击一样。但是,我遇到了一个关于Minvoke函数的问题。按照您编写的方式,当用户单击“完成”组中的某个项目时,它仍将被调用,最后一个项目将被删除。因此,我添加了if(item.status=='todo){},以仅调用'todo'项。你知道有什么方法可以真正改进它吗?谢谢这看起来没问题,因为点击“完成”项目应该是一个noop。根据此更新帖子中的代码。您好,谢谢您的回复。我尝试了您的方法:“groupedSortedListProjection.splice(索引,1);”然而,它没有起作用。我的“完成”组的最后一项的索引通常为“0”或“1”,并且不断增加。随着“完成”组的长度增加,当一项新任务完成时,最后一项的索引不起作用,因此它不起作用。另一个问题是,您知道Binding.list的索引是如何工作的,比如添加一个新项时,它会更改每个项的索引还是只更改新添加的项的索引?我查过了,但我不太明白。谢谢:)