javascript - 在应用程序数据中存储和检索 WinJS.Binding.List

标签 javascript windows-8 winjs

我正在使用 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/

相关文章:

javascript - 更新单元格注释时出现的可操作性能问题

c# - 将字典绑定(bind)到组合框

c# - 在 Metro 应用程序中打开媒体文件

javascript - Windows 8 如何选择要初始化的相机

javascript - 为什么我的 WinJS 手势不触发?

javascript - 如何使用 vo.js 在 for 循环中产生多个 Promise?

JavaScript:避免对象构造函数中的 'this' 被事件覆盖?

php - JavaScript 小时倒计时错误

c# - (来自 HRESULT : 0x8001010E (RPC_E_WRONG_THREAD)) 的异常

Windows 8 应用程序中的 Javascript