【问题标题】:durandal 2.0 navigateBack() causes full page refreshdurandal 2.0 navigateBack() 导致整页刷新
【发布时间】:2014-04-22 13:00:22
【问题描述】:

我正在尝试使用 Durandal 2.0.1 让 router.navigateBack 功能正常工作。

我有一个视图模型,它可以创建一个我们称之为领导的实体。创建新潜在客户后,我想替换 uri,使其具有编辑潜在客户路线而不是创建潜在客户路线,并在历史记录中替换它。保存后调用如下函数:

router.navigate('#lead/' + vm.lead().id(), { replace: true, trigger: false });

这是我的配置文件中的路由描述

{
    route: 'lead(/:leadId)',
    moduleId: 'lead/lead'
}

然后当我打电话时

router.navigateBack();

它导航到预期的路线,但总是会导致整个页面刷新。我试图避免整个页面刷新,并像往常一样简单地导航。

在 durandal 1.0 中,我曾经只是调用

router.replaceLocation();

要完成同样的任务,它会运作良好。我想知道我是否在这里遗漏了什么。

【问题讨论】:

    标签: durandal-2.0 durandal-navigation


    【解决方案1】:

    尝试以下方法:

    var leadId = vm.lead.peek().id.peek();
    router.navigate('#lead/' + leadId, { replace: true, trigger: false });
    

    我相信您的 observable 具有导致完全重新计算的依赖项。我们可以使用 Knockout 的peek() 来获取一个值而不需要创建依赖。

    【讨论】:

    • 感谢您的帮助。这非常有效!我在尝试删除潜在客户时遇到了类似的问题。删除时我打电话
    • 相同类型的方法,但使用 {replace: true, trigger: true} 导航离开并在删除后替换历史记录。此后,当我调用 router.navigateBack() 方法时,我在页面刷新时遇到了同样的问题。我用 peek 引用替换了对 observables 的引用,但是在 trigger: true 时它没有解决问题。我通过不替换路线并在尝试导航到已删除的记录时仅取消 canActivate 方法中的导航来解决此问题,所以这对我来说不是一个大问题,但如果你知道我又哪里出错了,我会很感激输入。
    • 哇......刚刚意识到这并没有解决我的问题......还意识到这个问题是特定于谷歌浏览器的。每当我调用 router.navigateBack() 并尝试离开使用 router.navigate('#...', { replace: true }) 设置的路由时,我都会刷新整页
    • @JohnGurski 只是关注你的 cmets。在最后一条评论中,您说“刚刚意识到这并没有解决我的问题。”您是指我的 建议,还是您前面两个cmets 中的某些内容?如果是前者,那么我需要更深入地研究。谢谢。
    • 你的建议并没有解决我的问题,请忽略我的前两个cmets,我是在自欺欺人!我的最后一条评论几乎可以解决问题。 navigateBack() 对我来说总是很好,除了当我离开使用 {replace: true} 设置的路线时(只发生在 chrome 中,而不是 IE11)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2010-10-05
    • 2013-04-15
    • 2013-02-15
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多