【发布时间】:2014-05-26 09:04:53
【问题描述】:
我在 Backbone 导航中遇到了这个奇怪的问题。我阅读了很多帖子,但找不到与我的问题相关的任何内容。
所以情况如下:假设我们有页面:A、B 和 C。
B 是编辑页面,我不想将其包含在历史记录中。
如果用户在页面 A 上,转到 B,然后到 C。如果他单击后退按钮,他应该被重定向到 A。
所以,为了让它工作,我监听元素上的所有点击事件,拦截它们,然后调用 Backbone.history.navigate() 方法。我还检查了当前的url,如果是B,我将{replace:true}参数传递给navigation(),这样B就从历史记录中省略了。
基本上它有效,B 从历史中省略。只有当 B 被跳过时,页面才会重新加载,而不仅仅是改变视图。如果没有跳过任何路线,则无需重新加载即可工作。
所以,例如:
- 如果我从 A 转到 B,单击“返回”,浏览器返回 A,无需重新加载,它会用幻灯片动画替换视图
- 如果我从 A 到 B,然后到 C,单击“返回”,浏览器会转到 A,但会重新加载页面。所以我没有看到幻灯片动画,而是完全重新加载并带有闪烁的空白页。
我没有使用 pushState。目前在 Chrome 上测试。
欢迎任何建议。我坚持了几个小时。无论我尝试什么都会导致相同的行为。我尝试启用 pushState,没有变化。
【问题讨论】:
-
我知道很难用代码重现类似的东西,但是为此做一个简单的小提琴是不是太过分了?我会说问题可能出在遇到页面 A 的路由器时启动的功能。也许您检查视图是否对应于页面 B,然后制作滑动动画,如果页面是 C,您不处理其他情况?
-
没那么简单。动画是用 jQuery Mobile 完成的,用 Backbone 路由......我必须为小提琴制作一个完整的迷你应用程序。我希望有人在此之前偶然发现并知道问题所在。如果没有人有答案,我稍后会做一个小提琴。没有任何特定于视图的检查。视图是从路由方法创建的,它们都使用相同的方法来替换视图。唯一的“特殊”逻辑是从 B 移动到 C 时,传递了 replace:true 参数。如果所有路线都相同,则其他所有内容
-
@ZolaKt 我看到在我正在构建的 Backbone 应用程序中发生了同样的事情。我会为你整理一个小例子。
-
我试图将指向示例的链接放入原始问题中,但看起来这不起作用。无论如何,这是一个例子:jsfiddle.net/niaconis/AV6V6/3@AhmadAlfy 这对诊断有帮助吗?
标签: javascript jquery backbone.js navigation browser-history