1

我是 Windows 8 Metro 风格应用程序开发的新手,我来自PHP基于 Web 应用程序开发的背景。

现在,在我的应用程序中,我使用获取数据WinJS.xhr并将其添加到WinJS.Binding.List列表中。问题是当我重新访问该页面时,从以前的 xhr 代码中获取的旧数据仍然存在,新数据附加到此列表中。

如何纠正这种情况?

编辑

Homedeliverydata.js 文件

     var list = new WinJS.Binding.List();
        var groupedItems = list.createGrouped(
            function groupKeySelector(item) { return item.group.key; },
            function groupDataSelector(item) { return item.group; }
        );

        function getFeaturedRestaurants(city_id) {
            Utilities.featuredRestaurants(city_id, 'home_delivery').
                then(function onComplete(result) {
                    var restaurants = result.result;

                    for (var i = 0; i < restaurants.length; i++) {
                        restaurants[i].group = Groups[0];
                        restaurants[i].key = restaurants[i].id;
                        list.push(restaurants[i]);
                    }
                },
                function onError() {
                }, function onProgress() {
                });
        }
  function clearData() {
        list.splice(0, list.length);
        list._currentKey = 0;
    }

HomeDelivery.js

  ready: function (element, options) {
            //code above this line removed
           HomeDeliveryListdata.GetSearchData(params).then(afterCall, function (req) { }, function (req) { });

        },
 unload: function () {
            HomeDeliveryListdata.clearData();
        }
4

2 回答 2

2

该列表将持续分配给它的变量的生命周期。此外,如果您为您的应用程序使用单页模型(默认的推荐方式),那么包含列表的变量可能会在页面之间存在。

如果您希望每次访问页面时都替换现有列表,请确保您适当地确定列表的生命周期(通常将列表范围限定为 xhr 请求的成功承诺就足够了)或编写代码来清除和刷新列表。

如果没有示例代码,很难指出确切的解决方法,但希望这能帮助您解决问题。

于 2012-09-03T15:03:19.017 回答
0

如果您希望它在不同的 WinJS.Navigations 之间可用,那么您应该清除数据;只需在应用程序中的某处保留变量,当您再次需要它时,只需将其重新用作数据源。

但是,它不会在您的应用程序执行之间持续存在(例如,如果它被终止)。为此,您需要使用文件数据库将数据写入磁盘(mozilla 有一个很好的指南这里有一个很好的包装器)

于 2012-09-03T17:19:23.227 回答