Javascript 如何在WinJs中创建排序列表?

Javascript 如何在WinJs中创建排序列表?,javascript,listview,winjs,Javascript,Listview,Winjs,我目前正在尝试为一个两页Win 8 Metro风格的应用程序创建一个按键排序的列表。 首先,我从数据数组创建两个新的WinJS.Binding.List var itemList = new WinJS.Binding.List(dataItems); var list = new WinJS.Binding.List(dataItems); 接下来,我创建过滤列表 Data.updateGroup(options) function updateGroup(key) { list =

我目前正在尝试为一个两页Win 8 Metro风格的应用程序创建一个按键排序的列表。
首先,我从数据数组创建两个新的WinJS.Binding.List

var itemList = new WinJS.Binding.List(dataItems);
var list = new WinJS.Binding.List(dataItems);
接下来,我创建过滤列表

Data.updateGroup(options)

function updateGroup(key) {  
list = itemList.createFiltered(function (itemList) { return itemList.group == key; });
}
然后我将这个列表分配给我的listView

listView.itemDataSource = Data.list.dataSource;
listView.itemTemplate = element.querySelector(".itemtemplate");
listView.layout = new ui.ListLayout();
但当我启动应用程序时,会显示未过滤列表


我必须更改什么?

您可以使用WinJS.Binding.List的方法创建一个排序投影,并为其提供排序函数,在该函数中使用密钥

createSorted的返回是WinJS.Binding.List的派生,因此,一旦知道过滤器,就可以调用createFiltered


换句话说,列表的投影是可组合的,因此可以将投影方法链接在一起,例如createSorted().createFiltered()或createFiltered().createSorted()。createGrouped也同样适用。

这是我在第二个代码框中制作的,但仍然不起作用。我不确定stackoverflow是否存在任何问题,但我发布了代码的重要部分,这是我问题的屏幕截图。看看你的代码,有两个问题。首先,只需声明var list=null;开始时,因为调用createFiltered将覆盖(和gc'd)使用new创建的。其次,当您设置ListView时,您使用的是Data.list.dataSource,但您的列表变量位于全局命名空间中,而不是数据命名空间中。所以我不完全确定ListView中实际显示的列表是什么。我猜您的Data.updateGroups方法将createFiltered的结果分配给与Data.list不同的变量。