【发布时间】:2013-06-21 12:30:40
【问题描述】:
当前,当我返回 false 时,我的 canDeactive 回调被调用了两次。
调用堆栈相同,唯一的区别是在 system.js 中,获取函数 args 变量在每次调用时具有不同的值。
第一次命中嵌套 setTimeout 中的断点时,args 具有我导航查看的值。
第二次(分秒) args 值是我当前的观点,我已经说过可能不会停用。
这听起来对任何人来说都很熟悉吗?我是否可能在每个视图中对我的 require 语句做错了什么
编辑更多信息
我的设置:(- 表示嵌套)
壳牌
-标题
-view1
--嵌套视图(使用敲除绑定)
-view2
-view3
--嵌套视图
为了在视图之间导航,我在每个视图上都有一个属性,说明它的页面标题以及任何链接项,例如 view1 header: "Page 1", links [{path: "#/view2"}] .我的每一个视图都“需要”标题视图,并将这些选项设置为激活(我不喜欢这篇文章,因为它感觉像是一个黑客,但那是另一天的事了)。
单击链接时,我调用 shell 上的一个函数,该函数又调用 router.navigateTo(点击的项目路径) 或返回 view3。
我可以确认此问题发生在所有视图(1,2 和 3)中,并且 canActivate 以及其他生命周期回调按预期以正确的顺序触发一次。
抱歉缺少代码,但我不确定在哪里看,因为它似乎是控制导航要求的东西(由于上面提到的单一差异)
【问题讨论】:
-
确实需要看一些代码来帮忙。 canDeactivate 应该只在你试图离开视图时被调用,我最好的猜测是你有一个试图离开的函数,然后你在你的 canDeactivate 方法中再次调用该函数。
-
遗憾的是它与 canDeactivate 回调的内容无关,因为我已经证明了这种行为: canDeactivate: function (isClose) { return false; } 有关我当前解决方案的更多信息,请参阅上面的编辑。
-
请张贴您的 canDeactivate 方法以及您在视图中所说的任何地方 canDeactivate 如果您确实正在这样做。 canDeactivate 并不意味着在您的视图中,因为如果您正在执行此操作,它就不是计算出的 observable。路由器尝试离开时会调用 canDeactivate。
-
您的 canDeactivate 方法为空?
标签: knockout.js durandal