正在清除WinJS绑定JavaScript数组

Clearing WinJS binding JavaScript array

本文关键字:JavaScript 数组 绑定 WinJS 清除      更新时间:2023-09-26

我相信这非常简单,但目前我还不清楚。

我有一个WinJS列表视图(在home.html中定义):

<div data-win-control="WinJS.UI.ListView" id="listView" style="display: inline"
    data-win-options="{ 
        itemDataSource: NotificationData.itemList.dataSource, 
        itemTemplate: select('#notificationMenuTemplate'),
        layout: { type: WinJS.UI.ListLayout }}">
</div>

很简单。我的itemDataSource是一个JavaScript文件(notificationData.js),定义如下:

(function () {
"use strict";
var dataArray = [
    { title: "Title 1", text: "Some text 1", time: "12 hours ago" },
    { title: "Title 2", text: "Some text 2", time: "17 hours ago" },
    { title: "Title 3", text: "Some text 3", time: "3 hours ago" },
    { title: "Title 4", text: "Some text 4", time: "18 hours ago" }
]
var dataList = new WinJS.Binding.List(dataArray);
var publicMembers =
    {
        itemList: dataList
    };
WinJS.Namespace.define("NotificationData", publicMembers);
})();

也很容易。在我的listView下面,我有一个按钮,我希望该按钮在按下时清除所有通知(清空数组)。我有一个home.js文件,它处理home.html中的所有内容,我只是不确定如何访问该数组并清空它?正如我所说,我确信这很容易,但我不清楚如何实现它。

首先要了解的是WinJS.Binding.List与创建它的数组之间的关系。构造时,List会创建自己的映射数组,其中包含对数组项的引用。因此,如果更改数组中项目的属性,它们在列表中也会更改。但是,如果清除dataArray(例如使用pop),List仍将保留对原始对象的引用,并且不会自行清除。

改变这种关系的一种方法是在WinJS.Binding.List上使用{proxy:true}选项,这意味着List将底层数组用于自己的存储。然后,如果清除数组或列表,则清除另一个。

如果没有proxy选项,请将数组视为List的初始值设定项,然后使用List的方法来管理其内容。在您的情况下,这是最有意义的,因为dataArray变量在其他任何地方都不可访问,也不能通过List访问。

无论如何,清除Binding.List最简单的方法是使用它的splice方法剪切掉它的所有项,即调用List.splice(0,List.length),或者您可以设置List.length=1(它只拼接掉一个项,因为不支持将长度设置为零),然后调用List.pop()获取最后一个项。