我在Ko映射中遇到了一个奇怪的问题。 我用这段代码:
var PList = [{ "Region": { "RegionName": "SomeRegion" }, "CDetails": {}, "Category": { "Name": "SomeCategory" }, "PSource": 1, "PDate": "0001-01-01T00:00:00"}];
var PViewModel = ko.mapping.fromJS(search('someSearch', 'True'));
var PViewModel2 = ko.mapping.fromJS(PostList);
function search(queryString, isFirst) {
$.ajax({
type: 'POST',
url: 'url',
data: { 'searchQuery': queryString },
dataType: 'json',
success: function (dt) {
if (isFirst != 'True') {
ko.mapping.fromJS(dt, PostsViewModel);
}
return dt;
}
});
};
奇怪的是,我看到了两个结果:
undefined
* PViewModel2的静态数据只是ajax帖子返回的数据的副本。
我的问题是:
if (isFirst != 'True')
子句是否是启动ko视图模型的正确方法?答案 0 :(得分:1)
您正在处理异步操作(Ajax请求)。 这些操作没有返回值。因此,这永远不会起作用:
ko.mapping.fromJS(search('someSearch', 'True'));
这就是success
回调的用途。传入的数据只能在那里处理。
function search(queryString, targetObservable) {
$.ajax({
type: 'POST',
url: 'url',
data: { 'searchQuery': queryString },
dataType: 'json',
success: function (dt) {
ko.mapping.fromJS(dt, targetObservable);
}
});
};
search('someSearch', PostsViewModel);