Javascript 如何在durandal激活方法中处理异步ajax调用?

Javascript 如何在durandal激活方法中处理异步ajax调用?,javascript,single-page-application,durandal,Javascript,Single Page Application,Durandal,我的文件夹viewModel中有以下内容: var observableData = ko.observable(); function activate(routeData) { var buildObservableData = function (data) { observableData(ko.mapping.fromJS(data, mapping)); // do stuff here that I need server da

我的文件夹viewModel中有以下内容:

  var observableData = ko.observable();
  function activate(routeData) {
     var buildObservableData = function (data) {
         observableData(ko.mapping.fromJS(data, mapping));
         // do stuff here that I need server data for
     }
     return dataservice.getFolder(currentFolderId, buildObservableData);
  }
将getFolder设置为:

var getFolder = function (id, buildData) {
   var request = $.ajax({
            async: true,
            url: endpoint,
            type: 'GET',
            dataType: 'json',
            xhrFields: {
                withCredentials: true
            },
        })
            .done(function (data) {
                buildData(data);
            })
            .fail(function (msg) {
                toastr.error("Error: Could not load folder data.");
            });
    }
现在,在我的文件夹视图中,我有以下内容:

<!-- ko foreach: data().folders -->
<!-- /ko -->
我做错了什么

更新:


如果我将ajax调用更改为:

return $.ajax({
return $.ajax({
由此:

var request = $.ajax({
var request = $.ajax({

然后我可以浏览我的视图。。。但我不确定这是否正确。我会把这个留着,以防它对其他人有帮助,或者它不对

如果我将ajax调用更改为:

return $.ajax({
return $.ajax({
由此:

var request = $.ajax({
var request = $.ajax({

然后我可以浏览我的视图。。。但我不确定这是否正确。我会把这个留着,以防它对其他人有帮助,或者它不对

您找到的解决方案是现成的解决方案,因此它是正确的。>您可以选择返回一个承诺,在异步激活逻辑完成时通知激活器。顺便说一句:你可以回答自己的问题,并将其标记为解决方案。虽然这并不是说你会因此而名声大噪,但它有助于结束问题。@RainerSpirit谢谢!很晚了,但是您不想返回AJAX承诺,然后在activate中有一个done方法来添加数据吗?在我看来,你的东西全倒了。这对你有用吗?