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

时间:2013-07-08 01:21:23

标签: 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 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 -->

因此,当我从一个文件夹导航到另一个文件夹时,我得到了这个:

"Unable to parse bindings.↵Message: TypeError: Cannot read property 'folders' of undefined;↵Bindings value: foreach: data().folders "

我做错了什么?

更新:

如果我将ajax调用更改为:

return $.ajax({

来自:

var request = $.ajax({

然后我可以浏览我的观点...但我不确定这是否正确。我会留下它,以防它帮助其他人或万一它是不对的。

1 个答案:

答案 0 :(得分:1)

如果我将ajax调用更改为:

return $.ajax({

来自:

var request = $.ajax({

然后我可以浏览我的观点...但我不确定这是否正确。我会留下它,以防它帮助其他人或万一它是不对的。