如何在WinJS中为ListView进行排序功能?

时间:2015-01-11 11:09:51

标签: javascript listview windows-phone-8.1 winjs

我有以下列表:

var myData = new WinJS.Binding.List([
  { title: "001", text: "one", picture: "/images/001.png" },
  { title: "009", text: "nine", picture: "/images/009.png" },
]);

我尝试使用此代码过滤我的列表,但失败了:

var filtered = myData.createFiltered(function (item) {
    return item.title == "001";
});

WinJS.Namespace.define("Sample.ListView", {
    data: filtered
});

如何使“createFiltered”功能起作用?

1 个答案:

答案 0 :(得分:1)

根据您在此处显示的内容,问题不在于过滤,如果我从ListView的data-win-options字符串中删除groupDataSource和groupHeaderTemplate,则该过滤正常工作。如果使用分组,则必须在WinJS.Binding.List上调用createGrouped并将其用作数据源,否则groups.dataSource属性将为null。您引用的示例显示了这一点,但在您的情况下,只创建了一个已过滤的源,没有可以使用的分组,并且您会崩溃。

也就是说,使用您显示的JS,以下HTML工作正常,因为我省略了组引用:

    <div class="smallListIconTextTemplate" data-win-control="WinJS.Binding.Template" style="display: none">
    <div class="smallListIconTextItem">
        <img src="#" class="smallListIconTextItem-Image" data-win-bind="src: picture" />
        <div class="smallListIconTextItem-Detail">
            <h4 data-win-bind="textContent: title"></h4>
            <h6 data-win-bind="textContent: text"></h6>
        </div>
    </div>
</div>

<div id="listView" class="win-selectionstylefilled"
     data-win-control="WinJS.UI.ListView"
     data-win-options="{ itemDataSource: Sample.ListView.data.dataSource,
        itemTemplate: select('.smallListIconTextTemplate'),
        selectionMode: 'none', tapBehavior: 'none', swipeBehavior: 'none',
        layout: { type: WinJS.UI.ListLayout, groupHeaderPosition: 'top'} }">
</div>

以下是try.buildwinjs.com中进行分组的示例(并采用英文排序顺序):

var grouped = myData.createGrouped(function (item) {
    return item.title.toUpperCase().charAt(0);
}, function (item) {
    return {
        title: item.title.toUpperCase().charAt(0)
    };
}, function (left, right) {
    return left.charCodeAt(0) - right.charCodeAt(0);
});

WinJS.Namespace.define("Sample.ListView", {
    data: grouped
});

提一下,这个分组功能不是世界准备的,因为它假设一个基于ASCII位置的排序顺序。真正的排序函数应考虑本地化排序顺序,这在Windows SDK HTML Listview分组和语义缩放示例中进行了演示,特别是在groupedData.js中。当然,这表明在WinRT中这样做,而try.buildwinjs.com必须是通用的。无论如何,对于我想在此上下文中提及的分组和排序,这是一个重要的考虑因素。