0

我正在使用 HotTowel/Durandal 进行 SPA。在我的主页上,我的 main.js 中有正常的入口过渡:

app.setRoot('viewmodels/shell', 'entrance');

这最终路由到我的 home.js 类。我现在所做的是在激活函数中,我进行了 ajax 调用来获取数据

function viewAttached() {
    return add(app.baseUrl + '/api/Customer/1/Animals');
}

我的视图有一个 div,只有在数组不为空时才会显示:

<div class="animal-results" data-bind="visible: visible()">

我遇到的问题是带有进度条的入口过渡,然后它消失了。当它消失时,数据还没有从服务器返回,所以页面看起来空白一两秒钟,然后在视图模型更新时弹出。

如何确保在服务器返回数据或错误之前,过渡一直在屏幕上?

4

1 回答 1

2

来自DurandalJS 文档

- 合成引擎寻找激活回调。如果在 compose 绑定中指定了任何 activationData,则将其作为参数传递。如果激活回调返回一个承诺,组合引擎将在继续之前等待它的解决。

  • 我不知道你的详细代码,但我认为这里的问题是你只是在做一个不返回承诺的 AJAX 调用,所以你的路由器只是导航到相关视图而不等待响应。

示例代码

return {
    activate: function () {
        var self = this;
        return $.getJSON('http://whatever/').then(function (receivedData) {
            self.data= receivedData;
        });
    }
}
于 2013-09-25T23:03:17.907 回答