如何进行转换等到我的数据加载后再消失?

时间:2013-09-25 19:46:45

标签: knockout.js durandal hottowel

我正在使用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()">

我遇到的问题是入口转换带有进度条显示,然后它就消失了。当它消失时,数据尚未从服务器返回,因此页面看起来空白一两秒,然后在更新视图模型时弹出。

如果从服务器返回数据或错误,我如何确保转换停留在屏幕上?

1 个答案:

答案 0 :(得分:2)

来自DurandalJS Docs

- 合成引擎查找激活回调。如果在compose绑定中指定了任何activationData,那么它将作为参数传递。如果激活回调返回一个promise,则合成引擎将在进行处理之前等待其解析。

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

示例代码

return {
    activate: function () {
        var self = this;
        return $.getJSON('http://whatever/').then(function (receivedData) {
            self.data= receivedData;
        });
    }
}