Javascript 使用Knockout JS将多个不同的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); }

我试图将多个(不同的)JSON源映射到一个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 = 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);
    });
这是异步的,因此在绑定时仍然没有数据。这是我能说的最好的了,问题出在哪里还不是很清楚。检查控制台中的错误,这将帮助您了解问题所在