【问题标题】:Knockout - Updating observableArray in View Model淘汰赛 - 在视图模型中更新 observableArray
【发布时间】:2013-02-07 09:18:17
【问题描述】:

我希望将我的视图模型作为 JSON 字符串保存到数据库中。这个想法是,我可以通过读回 JSON 并使用直接方法加载我的视图模型的数据来重新加载我的视图模型:

来自 Knockout 文档:

// Load and parse the JSON
var someJSON = /* Omitted: fetch it from the server however you want */;
var parsed = JSON.parse(someJSON);

// Update view model properties
viewModel.firstName(parsed.firstName);
viewModel.pets(parsed.pets);

这一切都很好,但是我已经初始化了我的模型并且我只是用我已经保存的模型来更新它,我看不到如何在数组的下拉列表中选择最初选择的条目-下列表。

换句话说,当我保存我的模型时,宠物下拉列表被选择为“猫”。然后我将下拉列表选择更改为“狗”。在重新加载保存的模型时,我需要将下拉列表选择重置为“Cat”。

我对此有点担心,因为我有一些对象数组也需要从保存的模型中读取,而且看起来很难做到。

欢迎任何想法或建议:)

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    您正在寻找的是 Knockout 的映射插件。 http://knockoutjs.com/documentation/plugins-mapping.html

    它具有处理 JSON 到 observables 和返回的方法。

    所以在你的例子中你可以这样做:

    var viewModel = ko.mapping.fromJSON(someJSON);
    

    当您准备好返回服务器时:

    var jsonData = ko.mapping.toJSON(viewModel);
    

    如果你需要的话,还有对象文字助手(ko.mapping.toJS & ko.mapping.fromJS)

    【讨论】:

    • 感谢您的建议 - 我正在使用框架,所以我不知道是否可以安装插件,但肯定只是引用附加文件的问题?
    • 对不起,我的意思是我已经弄清楚当我的代码未能初始化可观察数组时发生了什么——我的 Web 服务没有及时返回数据,而是设置了 async= false 解决了这个问题。下一个问题是,如前所述,我有对象数组,然后包含嵌套数组。我还没有找到如何初始化这些复杂的对象。不过,我会为此创建一个新问题 :) 再次感谢。
    • 我试过这个插件,它似乎适用于基本的可观察对象,但对复杂对象的数组没有任何作用——看来我必须手动完成这些。跨度>
    • 我们将它用于一些非常复杂的对象,它会为我们映射所有内容。不确定你看到了什么,但它应该可以处理你的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2015-04-01
    • 2016-03-13
    相关资源
    最近更新 更多