[英]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对象。
toJSON
和fromJSON
方法应成对使用:
var jsonData = ko.toJSON(testdata);
ko.mapping.fromJSON(jsonData, {}, me);
同样适用于toJS
和fromJS
:
var jsonData = ko.toJS(testdata);
ko.mapping.fromJS(jsonData, {}, me);
演示JSFiddle 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.