我正在使用 HTML/JavaScript 开发 Windows 8 应用商店应用,但在将 WinJS.Binding.List 存储和检索到 Windows.Storage.ApplicationData.current.roamingSettings 时遇到了问题。
我确实通过手动滚动我自己的方法来实现此功能,将绑定(bind)列表转换为 XML 字符串并存储它,然后在检索时将其解析回列表。但是,这似乎效率低下,我正在努力寻找更好的方法。我尝试过 JSON.stringify() 和 JSON.parse() ,它们似乎存储和检索正确的数据,但是一旦我将数据绑定(bind)到 winControl,应用程序就会崩溃并显示 0 (根本没有错误消息)。
这是我的一些代码来演示我正在尝试的内容(列表是一个绑定(bind)列表):
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 行代码,并且我可以停止使用整个库。另外,随着我的前进,我计划还需要存储更多的绑定(bind)列表。谢谢!
最佳答案
您需要绑定(bind)到列表的 dataSource 属性,而不是列表本身:
listview.itemsSource = new WinJS.Binding.List(list).dataSource;
dataSource 属性具体是 ListView 所需的数据源 IListDataSource。 ListView 不能直接理解有关 WinJS.Binding.List 的任何内容,只能通过该特定接口(interface)来理解。 (我在我的免费电子书 Programming Windows Store Apps with HTML, CSS, and JavaScript, 2nd Edition 的第 7 章“数据源的结构”部分中对此进行了讨论。)
使用 JSON 保存并重新加载列表完全没问题。
关于javascript - 在应用程序数据中存储和检索 WinJS.Binding.List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26248020/