Javascript 使用Knockout JS将多个不同的JSON源映射到一个viewmodel
我试图将多个(不同的)JSON源映射到一个viewModel中,但似乎无法使其正常工作 我创建了一个视图模型:Javascript 使用Knockout JS将多个不同的JSON源映射到一个viewmodel,javascript,json,knockout.js,knockout-mapping-plugin,Javascript,Json,Knockout.js,Knockout Mapping Plugin,我试图将多个(不同的)JSON源映射到一个viewModel中,但似乎无法使其正常工作 我创建了一个视图模型: var viewModel; var mappingPerformedActions = { 'PerformedActions': { key: function(data) { return ko.utils.unwrapObservable(data.Id); }
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 = 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();
我创建了不同的映射选项,如下所示:
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 = 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();
然后我构建get函数:
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 = 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>
这适用于单一来源
<ul data-bind="foreach: BiztalkEntities">
<li><span data-bind="text: Name"></span></li>
</ul>
请注意,当我只有一个源代码时,所有这些都有效,因此URL中没有错误或其他错误。我已经看过堆栈溢出,但似乎找不到一个适合我需要的例子,我希望你能告诉我我在这里做错了什么 让您的viewModel具有两个不同的属性并映射到这些属性。否则,您需要将数据合并到单个数组中: var viewModel={PerformedActions:[],Entities:[]} 然后分配接收到的数据:
$.getJSON("localhost/urlWhichWorksWithSingleMapping", function(getdata) {
viewModel.PerformedActions = ko.mapping.fromJS(getdata, mappingEntities );
});
$.getJSON("localhost/anotherUrlWhichWorksWithSingleMapping", function(getdata) {
viewModel.Entities = ko.mapping.fromJS(getdata, mappingPerformedActions);
});
这是异步的,因此在绑定时仍然没有数据。这是我能说的最好的了,问题出在哪里还不是很清楚。检查控制台中的错误,这将帮助您了解问题所在