我正在尝试将多个(不同的)JSON源映射到一个viewModel中,但我似乎无法让它工作。
我创建了一个viewModel:
var viewModel;
我创建了不同的映射选项,如下所示:
var mappingPerformedActions = {
'PerformedActions': {
key: function(data) {
return ko.utils.unwrapObservable(data.Id);
}
}
};
var mappingEntities = {
'Entities': {
key: function(data) {
return ko.utils.unwrapObservable(data.Id);
}
}
};
然后我构建了我的get函数:
get = function() {
$.getJSON("localhost/urlWhichWorksWithSingleMapping", function(getdata) {
viewModel = ko.mapping.fromJS(getdata, mappingEntities );
});
$.getJSON("localhost/anotherUrlWhichWorksWithSingleMapping", function(getdata) {
ko.mapping.fromJS(getdata, mappingPerformedActions, viewModel);
});
ko.applyBindings(viewModel);
};
get();
然后我尝试循环实体
<ul data-bind="foreach: BiztalkEntities">
<li><span data-bind="text: Name"></span></li>
</ul>
适用于单一来源
请注意,当我只有一个源时,所有这些都有效,因此URLS或其他内容没有错误。我已经查看了堆栈溢出,但似乎无法找到符合我需求的示例,我希望你能告诉我我在这里做错了什么!
答案 0 :(得分:2)
让viewModel具有两个不同的属性并映射到那些属性。否则,您需要将数据合并到单个数组中:
var viewModel = {PerformedActions:[],实体:[]};
然后分配收到的数据:
$.getJSON("localhost/urlWhichWorksWithSingleMapping", function(getdata) {
viewModel.PerformedActions = ko.mapping.fromJS(getdata, mappingEntities );
});
$.getJSON("localhost/anotherUrlWhichWorksWithSingleMapping", function(getdata) {
viewModel.Entities = ko.mapping.fromJS(getdata, mappingPerformedActions);
});
这是异步的,所以在绑定时你仍然没有数据。这是我能提出的最好的,不是很清楚问题出在哪里。检查控制台是否有错误,这有助于您了解问题所在。