WinJS.Binding.List中的数据是否持久?

时间:2012-09-03 14:19:48

标签: microsoft-metro

我是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();
        }

2 个答案:

答案 0 :(得分:2)

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

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

很难指出没有示例代码的确切修复,但希望这可以帮助您解决问题。

答案 1 :(得分:0)

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

然而它不会在您的应用程序执行之间持续存在(例如,如果它被终止)。为此,您需要使用filesdatabase将数据写入磁盘(mozilla有good guide,并且有一个很好的包装here