我是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();
}
答案 0 :(得分:2)
该列表将持续分配给它的变量的生命周期。此外,如果您正在为您的应用程序使用单页模型(默认的,推荐的方式),那么包含该列表的变量可能会在页面之间存在。
如果您希望每次访问页面时都替换现有列表,请确保适当地确定列表的生命周期(通常将列表限定为xhr请求的成功承诺就足够了)或编写代码清除并刷新列表。
很难指出没有示例代码的确切修复,但希望这可以帮助您解决问题。
答案 1 :(得分:0)
如果您希望在不同的WinJS.Navigations之间使用它,那么您应不清除数据;只需在应用程序中的某个位置保留变量,当您再次需要它时,只需将其重新用作数据源即可。
然而它不会在您的应用程序执行之间持续存在(例如,如果它被终止)。为此,您需要使用files或database将数据写入磁盘(mozilla有good guide,并且有一个很好的包装here)