【问题标题】:DurandalJS - Why are transitions not starting right away when a user navigatesDurandalJS - 为什么当用户导航时没有立即开始转换
【发布时间】:2013-06-25 01:28:58
【问题描述】:

有人可以解释为什么当用户点击 Durandal 的链接(导航)时,过渡(至少是默认的入口)没有立即开始吗?

换句话说,我们是否需要两种机制(加载动画 + 过渡)来指示正在执行的操作(例如,激活方法中的 ajax 调用)。

我确定这是有充分理由的,或者我只需要修改入口过渡?

【问题讨论】:

    标签: durandal


    【解决方案1】:

    似乎 Durandal 的转换会在激活函数解析后运行。我问了similar question,我在其中列举了一些我发现的特别适合我的情况的可能解决方案:

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      如果您没有compress 整个应用程序,那么第一个过程将是 requirejs 下载下一个 amd 模块,然后下载相应的视图。

      下一步是调用模块上的 durandal 激活。如果它返回Deferred 则激活,然后它将等待延迟完成。

      一旦激活完成,就会调用转换。过渡负责将旧视图换成新视图。

      因此,如果启动转换需要一段时间,可能是因为它在下载模块和视图方面滞后......或者您的激活方法需要一些时间才能完成。

      【讨论】:

      • 谢谢埃文!我知道这一切。问题是:为什么转换服务 also 表示正在进行一个动作(ajax)......而不是在激活完成时调用转换,延迟将用作到过渡何时开始和何时结束......话虽如此,我很可能超出了范围,我可能会很快删除这个问题;-)
      • 您可以在他们单击链接后立即显示一个微调器,并让它一直显示,直到显示新视图。如果那是你想要做的..?
      • 而不是做两件事(显示微调器和执行转换),我宁愿只使用转换:它将跨越所有请求而不是在请求完成时触发......承诺的帮助。
      猜你喜欢
      • 2011-04-20
      • 1970-01-01
      • 2011-01-02
      • 2018-11-03
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多