繁体   English   中英

从json对象中剔除map.fromJS for observableArray。 数据丢失

[英]Knockout maping.fromJS for observableArray from json object. Data gets lost

我有一个带有observable和observableArray的视图模型。 假定单击按钮即可填充JSON对象并将其映射到视图模型...我相信“应该”填充observableArray。 单击按钮发生。 没有错误。 如果在发生映射时通过调试器运行,则将填充可观察对象,而obserableArray则不会。 这意味着假定要基于observableArray显示的HTML对象不会得到更新。

HTML:

<div data-bind="if: ErrorMessages().length"> <span>Error Messages</span>
    <ul data-bind="foreach: ErrorMessages">
        <li> <span data-bind="text: Description"></span>
        </li>
    </ul>
</div>
<button data-bind="click: ShowErrors">Go</button>

var ViewModel = function () {
    var me = this;
    me.AData = ko.observable();
    me.ErrorMessages = ko.observableArray([]);

使用Javascript:

    me.ShowErrors = function () {


        var testdata = {
            AData: {
                Something: 1
            },
            ErrorMessages: [{
                Description: 'Error #1',
                Code: '01'
            }, {
                Description: 'Error #2',
                Code: '02'
            }]
        };
        var jsonData = ko.toJSON(testdata);

        ko.mapping.fromJS(jsonData, {}, me);
    };
};
ko.applyBindings(new ViewModel());

http://jsfiddle.net/Eves/v9SEk/4/

我的真实代码可以到达并从Web服务获取数据。 我认为上面创建了一个对象并将其转换为JSON,然后使用ko.mapping.fromJS映射它可以最好地表示正在发生的事情。 无论如何...

我怀疑我做过一些愚蠢的事情,或者至少假设了我不应该做的事情。

您正在使用ko.toJSON(testdata)转换为JSON,但没有通过ko.mapping.fromJS(jsonData, {}, me);从JSON读取ko.mapping.fromJS(jsonData, {}, me); 但来自普通的JS对象。

toJSONfromJSON方法应成对使用:

var jsonData = ko.toJSON(testdata);

ko.mapping.fromJSON(jsonData, {}, me);

同样适用于toJSfromJS

var jsonData = ko.toJS(testdata);

ko.mapping.fromJS(jsonData, {}, me);

演示JSFiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM