我一直在使用Durandal作为各种着陆页,并使用它来填充页面的主要内容(#applicationHost
,下面的红色区域)。它有效,但页面渲染速度是一个问题(requirejs,ajax调用,组合等)
由于我们已经有了内容数据,我们正在考虑在服务器端渲染页面内容。
但是我们仍然希望在这个页面上使用Durandal来允许散列路由到其他视图,触发Durandal对话框,以及数据绑定一些可以异步加载的observable。 (下面的绿色区域)
问题是我不想在此着陆页上启动Durandal时立即替换#applicationHost内容(上面的红色)。对于散列路由到其他视图,我想替换或隐藏它。
答案 0 :(得分:1)
不确定你究竟在问什么,但听起来这至少可以解决部分问题。
您可以使用'promises'在启动屏幕加载和您的应用执行任何需要启动的应用之间实施最小延迟。假设您的Durandal main.js在启动时加载shell.js的常见设置,返回来自shell.js'activate'回调的组合承诺。我建议将Q库用于承诺(Q + Durandal docs)。
shell.js将包含以下内容。下面的逻辑使启动画面显示至少3秒钟。如果initializeAppPromise花费的时间超过3秒,则更长:
in shell.js...
activate = function(){
var initializeAppPromise = router.map(....)..etc...activate();
var minimumDelayPromise = Q.delay(3000); //give splash animation/whatever time to display
return Q.all([initializeAppPromise, minimumDelayPromise ])
.spread(function(routerActivationResponse){
return routerActivationResponse;
});
}
答案 1 :(得分:0)
为此提出了一个不错的解决方案,希望它有助于其他人: