Knockout.js 使用knockout.mapping插件将多个数组组合成一个可观察数组

Knockout.js 使用knockout.mapping插件将多个数组组合成一个可观察数组,knockout.js,Knockout.js,我似乎不知道如何将多个源代码与knockoutjs的映射插件合并在一起。在下面的代码中,我尝试将不同的请求映射到同一个可观察的集合中,但只添加了最后一个请求 this.dataSets = mapper.fromJS([], { key: (data) => data.dataSetKey, create: (options) => { console.log(options.data);

我似乎不知道如何将多个源代码与knockoutjs的映射插件合并在一起。在下面的代码中,我尝试将不同的请求映射到同一个可观察的集合中,但只添加了最后一个请求

       this.dataSets = mapper.fromJS([], {
            key: (data) => data.dataSetKey,
            create: (options) => {
                console.log(options.data);
                var item = new FxsPortal.FxsSelectable<AscendDataSet>(
                    mapper.fromJS(options.data, {
                        'copy': ["cameraInfo"]
                    }));
                return item;
            }
        }); 

        userStore.get().subscriptions.forEach(subscription => {        
            this.logger.logInformation("Iterating Subscription", subscription);

            (xhr = $.ajax({
                beforeSend: (xhr) => xhr.setRequestHeader('Authorization', "Bearer " + OAuthModule.getStoredTokens().access_token),
                type: 'GET', url: AppOptions.DataServiceUri + "/" + subscription.id + "/datasets?includeCandidates=" + v,
            }))
                .done((result: { continuationToken; results }) => {

                    console.log(["Result from DataSet Api", result]);
                    var data = result.results;

                    mapper.fromJS(data, {}, this.dataSets);           
                }).always(() => {
                    this.isContentLoading(false);
                    xhr = null;
                });
        });
this.dataSets=mapper.fromJS([]{
key:(data)=>data.dataSetKey,
创建:(选项)=>{
console.log(options.data);
var item=new fxsortal.fxselectable(
mapper.fromJS(options.data{
“复制”:[“Cameranfo”]
}));
退货项目;
}
}); 
userStore.get().subscriptions.forEach(订阅=>{
this.logger.logInformation(“迭代订阅”,订阅);
(xhr=$.ajax)({
beforeSend:(xhr)=>xhr.setRequestHeader('Authorization',“Bearer”+OAuthModule.getStoredTokens().access_token),
键入:“GET”,url:AppOptions.DataServiceUri+“/”+subscription.id+“/datasets?includeCandidates=“+v,
}))
.done((结果:{continuationToken;结果})=>{
log([“数据集Api的结果”,结果]);
var数据=结果。结果;
fromJS(数据,{},this.dataset);
}).总是(()=>{
此.isContentLoading(false);
xhr=null;
});
});

在调用
ko.mapping
之前合并数据

jQuery.when
可以等待多个延迟(ajax)对象。

在这里,我们必须使用
apply
技巧将
ajax
对象传递给
$

//map your data array into an array of deferred objects, feed to $.when
$.when.apply($, $.map(userStore.get().subscriptions(), function(subscription) {
    return $.ajax(..); //without any 'done' 'always' 'fail' callbacks!
})).done(function() {
  //count of result is unknown, have to get them out from arguments
  $.each(arguments, function(i, arg) {
    // arg[0] is the JSON data, arg[1] and arg[2] are statusText, jqXHR.
  });

  // now, you got all JSON data, merge them before ko.mapping :-)
});