在Application Data中存储和检索WinJS.Binding.List

时间:2014-10-08 01:48:50

标签: javascript windows-8 winjs

我正在使用HTML / JavaScript开发Windows 8商店应用,并且我遇到了将WinJS.Binding.List存储和检索到Windows.Storage.ApplicationData.current.roamingSettings中的问题。

我DID让这个工作手动滚动我自己的方法将绑定列表转换为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行代码,我可以停止使用整个库。此外,随着我​​的发展,我计划拥有更多需要存储的绑定列表。谢谢!

1 个答案:

答案 0 :(得分:2)

您需要绑定到List的dataSource属性,而不是List本身:

listview.itemsSource = new WinJS.Binding.List(list).dataSource;

dataSource属性特别是ListView对数据源所需的IListDataSource。 ListView不直接了解WinJS.Binding.List的任何内容,只能通过该特定接口。 (我在第7章,第34节中讨论了这一点;数据源的结构",在我的免费电子书中Programming Windows Store Apps with HTML, CSS, and JavaScript, 2nd Edition。)

使用JSON保存和重新加载列表完全没问题。