在激活解决之前启动转换

dae*_*s28 5 durandal

是否有一种简单的方法可以使用Durandal的过渡来立即淡出旧视图,并在其激活功能解决后淡入新视图?

这是一些背景:

我有一个Durandal 1.2 SPA,其中大多数视图的激活功能可以进行服务调用并返回适当的承诺.这一切都很有效,但转换仅在加载完成时运行,有时服务可能需要几秒钟才能响应 - 导致用户体验不佳,您点击链接并且在发生任何明显事件之前需要几秒钟.

解决方案是立即(在激活解析之前)为旧视图设置动画,然后在激活完成后在新视图中设置动画.目前,每个动画视图都对应一条路线,我不希望这会改变.我已经提出并测试了一些所有工作但看起来不太理想的解决方案(并且没有利用Durandal的过渡框架):

  • 手动设置其deactivate()中的每个视图的动画,并通过其viewAttached()将其设置为动画
  • 将.page-host div的可见性绑定到router.isNavigating(使用自定义绑定来处理转换,例如来自淘汰站点的fadeVisible示例)
  • 手动订阅router.isNavigating并在更改时运行自定义逻辑

我已经尝试了所有这些,到目前为止,我喜欢.page-host div上的自定义绑定最好,因为它涉及的代码量最少,但它只适用于我的情况,因为我的具体情况而且不是通用的解.

这似乎就像Durandal的过渡创造的那样.在Durandal中使用过渡(在1.2或即将发布的2.0版本中)有更优雅的方法吗?

我看到这个问题似乎在问类似的东西,但似乎有点不那么具体,没有相关的答案.

Eis*_*ect 0

将异步逻辑移出 activate 并将其放入 viewAttached 中。这将使视图立即呈现动画。然后,从 viewAttached 中,您可以安全地执行异步代码,而不会破坏 KO,因为绑定已经应用。(注意:viewAttached 在 2.0 中被重命名为 AttachedToParent。)