我正在开发一个使用HTML/JavaScript的Windows 8商店应用程序,并且遇到了将一个WinJS.Binding.List存储并检索到Windows.Storage.ApplicationData中的问题.current.roamingSettings。在应用程序数据中存储和检索WinJS.Binding.List
我得到这个工作通过手动滚动我自己的方法将绑定列表转换为XML字符串并存储,然后在检索解析它回到列表中。但是,这似乎是疯狂的低效率,我试图找到更好的方法。我试过JSON.stringify()和JSON.parse(),它们似乎存储和检索正确的数据,但只要我将数据绑定到winControl,应用程序就会崩溃,出现0(根本没有错误消息)。
这里有点我的代码来证明我试图什么(列表是绑定列表):
function onSaveData() {
if (list) {
Windows.Storage.ApplicationData.current.roamingSettings.values["data"] = JSON.stringify(list);
}
}
function onLoadData() {
var data = Windows.Storage.ApplicationData.current.roamingSettings.values["data"];
if (data) {
list = JSON.parse(data);
var listview = element.querySelector("#mylistview").winControl;
listview.itemsSource = new WinJS.Binding.List(list);
}
}
我知道我能得到这个工作了很长的路,所以我不找任何解决方案...我真的只是希望有一个简单的方法来存储/检索这些数据对象,我错过了。如果我能找到一个更简单的方法来做到这一点,它将消除约40行代码,我可以停止使用整个库。此外,随着我的前进,我计划拥有更多的绑定列表,这些列表也需要存储。谢谢!
啊。我上面的例子中的“listview”是一个自定义控件,它包装了一个实际的ListView。 itemsSource由实际列表设置,并在内部使用dataSource来设置ListView。你确实回答了我的问题,但关于使用JSON进行保存和重新加载。这意味着我还有其他事情正在进行。谢谢。 – BrianLegg 2014-10-08 03:24:45
您需要确保序列化的JSON实际上是一个数组,以便它在重新加载时成为JavaScript数组,否则List将无法从其中进行初始化。 – 2014-10-08 21:39:50