0

在我的 Durandal 应用程序中,我有一个搜索页面 - 我想:

  • 从菜单加载时加载干净的搜索页面 ( router.navigate('#/search'))
  • 从搜索页面导航到某个项目时,然后使用后退按钮,这应该返回到原始搜索结果和条件。

我还将我的搜索条件和结果存储为(应用程序范围的)单例,它通过 RequireJS 注入到视图模型中。

我是否能够:区分用户如何进入页面?我可以看到在两个入口方法下都触发了 activate() 生命周期调用。

4

2 回答 2

1

如果您想知道用户是否通过单击应用程序中的链接/按钮或通过输入 url/后退按钮访问,我会在用户单击链接/时引发事件按钮并在搜索页面上检查事件是否已引发或在 router.navigate 中传递一些参数。

于 2013-10-08T14:33:23.150 回答
1

我最近一直在做一些工作,以区分用户在应用程序中的点击以及浏览器中的后退或前进按钮。如果您使用 router.navigate() 在 Durandal 应用程序中导航,则 router.explicitNavigation 标志设置为 true。但是您可能希望在 'router:route:activating' 事件中的 'router:navigation:complete' 事件之前捕获它,因为在 'router:navigation:complete' 事件中标志被设置回 false。

底线是,如果您使用 router.navigate 在应用程序中导航,则 router.explicitNavigation 属性将设置为 true,如果使用浏览器中的后退/前进按钮触发导航,则 router.explicitNavigation 将设置为 false。

在实际情况下,您甚至可能不需要执行 router.navigate() 来区分应用内导航和浏览器后退/前进,因为 Durandal 的路由器模块会侦听文档级别上的所有“a”标签单击并将显式导航标志设置为真的。但是我还没有完全测试过。

于 2014-02-11T21:30:58.187 回答