Durandal 2.0 durandal 2.0 navigateBack()导致整页刷新

Durandal 2.0 durandal 2.0 navigateBack()导致整页刷新,durandal-2.0,durandal-navigation,Durandal 2.0,Durandal Navigation,我正在尝试使用Durandal 2.0.1使router.navigateBack功能正常工作 我有一个viewmodel,它可以创建一个我们称之为lead的实体。创建新lead后,我希望替换uri,使其具有编辑lead路由而不是创建lead路由,并在历史记录中替换它。保存后我调用以下函数: router.navigate('#lead/' + vm.lead().id(), { replace: true, trigger: false }); 这是我的配置文件中的路线描述 { ro

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

我有一个viewmodel,它可以创建一个我们称之为lead的实体。创建新lead后,我希望替换uri,使其具有编辑lead路由而不是创建lead路由,并在历史记录中替换它。保存后我调用以下函数:

router.navigate('#lead/' + vm.lead().id(), { replace: true, trigger: false });
这是我的配置文件中的路线描述

{
    route: 'lead(/:leadId)',
    moduleId: 'lead/lead'
}
然后当我打电话的时候

router.navigateBack();
它会导航到预期的路由,但始终会刷新整个页面。我试图避免整个页面刷新,只是像往常一样导航

在durandal 1.0中,我过去经常打电话给

router.replaceLocation();
为了完成同样的任务,它会很好地工作。我想知道我是否遗漏了一些内容。

请尝试以下操作:

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

我相信你的可观测对象有一个依赖性,这导致了一个完整的重新计算。我们可以使用Knockout的
peek()
获得一个值,而无需创建依赖项。

感谢您的帮助。这工作做得很好!我在尝试删除潜在客户时遇到了类似的问题。删除时,我调用相同类型的方法,但在删除后使用{replace:true,trigger:true}导航到别处并在历史记录中替换。此后调用router.navigateBack()方法时,页面刷新也会遇到同样的问题。我用peek引用替换了对可观察对象的引用,但当trigger:true时,它并没有解决这个问题。我解决了这个问题,在尝试导航到已删除的记录时,没有替换路由,只是取消了canActivate方法中的导航,所以这对我来说不是什么大问题,但如果你知道我再次出错的地方,我将非常感谢你的输入。哇。。刚刚意识到这并不能解决我的问题。。。同时也意识到这个问题是谷歌chrome浏览器特有的。每当我调用router.navigateBack()并尝试导航离开使用router.navigate(“#…”,{replace:true})设置的路由时,我都会得到完整的页面refresh@JohnGurski只是跟着你的评论。在最后一条评论中,你说“刚刚意识到这并没有解决我的问题”。你是指我的建议,还是指你前面两条评论中的内容?如果是前者,那么我需要更深入地研究。谢谢。你的建议并没有解决我的问题,请忽略我的前两条评论,我是在欺骗自己!我的最后一句话基本上解决了这个问题。navigateBack()对我来说总是很好,除了当我从使用{replace:true}设置的路线导航时(仅在chrome中出现,而不是在IE11中出现)。