Javascript 对服务器的调用完成之前,启动屏幕消失

Javascript 对服务器的调用完成之前,启动屏幕消失,javascript,durandal,durandal-2.0,durandal-navigation,Javascript,Durandal,Durandal 2.0,Durandal Navigation,嗨,我想能够延迟一下我的应用程序的启动,这就是我的意思 这是我的shell视图: <div> <!-- ko compose: { view : header }--> <!--/ko--> <!-- ko compose: { view : content }--> <!--/ko--> 我之所以使用observables而不是视图路径的字符串表示,是因为在我的shell中,我决定是否应该在登录或主页上发送我的用户 除了从服务器获

嗨,我想能够延迟一下我的应用程序的启动,这就是我的意思

这是我的shell视图:

<div>
<!-- ko compose: { view : header }-->
<!--/ko-->
<!-- ko compose: { view : content }-->
<!--/ko-->
我之所以使用observables而不是视图路径的字符串表示,是因为在我的shell中,我决定是否应该在登录或主页上发送我的用户

除了从服务器获取isAuthenticated属性所需的时间之外,这一切都是完美的。启动屏幕消失,用户在收到数据之前等待空白页

现在我可以尝试在main.js文件中获取数据并缓存它,但我认为main.js应该只负责应用程序配置


有没有办法在shell实际绑定和启动屏幕消失之前向服务器调用数据?

我同意PW Kad的建议。Durandal包装有Q.js。 我也有同样的情况 [检查用户是否经过身份验证=>通过Durandal路由器从数据库加载用户菜单,该路由器返回承诺=>加载内容] 但是,我在你的代码中看不到路由器

无论如何,在activate方法中,您可以执行以下操作:

  var vm = {
            header: ko.observable(),
            content: ko.observable(),
            isAuthenticated: ko.observable(false),
            activate: activate
        };

function activate() {

            return Authenticate()
                 .then(setDefaultDisplayPage)
                 .fail(failed);
        }
function Authenticate() {
// pass an observable as a parameter to your function 
                dataService.account.isAuthenticated(isAuthenticated);
                return Q.resolve();
                }
       function setDefaultDisplayPage() {        
        if(isAuthenticated()) {
    setHeaderAndContentObservables(appViewModels.header.generalHeader,appViewModels.content.homeContent);
}
        else { setHeaderAndContentObservables(appViewModels.header.loginHeader,appViewModels.content.loginContent);
        }
    }
    function failed(){
// failure code goes here
}

这样,在从服务器获取数据之前,viewmodel不会被绑定。

您可以在激活调用中从shell返回承诺。看起来你就快到了,但你不会还的。Durandal生命周期允许您返回该承诺,它将等待该承诺在完成“加载”之前得到解决。我相信您可以让它与jQuery承诺一起工作,但是如果您使用Q.js,您可以使用类似return Q.All()的东西;
  var vm = {
            header: ko.observable(),
            content: ko.observable(),
            isAuthenticated: ko.observable(false),
            activate: activate
        };

function activate() {

            return Authenticate()
                 .then(setDefaultDisplayPage)
                 .fail(failed);
        }
function Authenticate() {
// pass an observable as a parameter to your function 
                dataService.account.isAuthenticated(isAuthenticated);
                return Q.resolve();
                }
       function setDefaultDisplayPage() {        
        if(isAuthenticated()) {
    setHeaderAndContentObservables(appViewModels.header.generalHeader,appViewModels.content.homeContent);
}
        else { setHeaderAndContentObservables(appViewModels.header.loginHeader,appViewModels.content.loginContent);
        }
    }
    function failed(){
// failure code goes here
}