触发同位置路由
Posted
技术标签:
【中文标题】触发同位置路由【英文标题】:Trigger same location route 【发布时间】:2012-01-22 23:08:17 【问题描述】:有没有办法在backbone.js 中触发相同的位置路由,例如当位置为/My/App/#/About
并且用户再次单击具有相同路由的锚点以刷新页面内容时。
【问题讨论】:
【参考方案1】:Backbone.history.loadUrl(Backbone.history.fragment);
您的具体问题的解决方案并没有真正记录下来,似乎建议的最佳做法是只调用在您要触发的路由中声明的函数:/
参考:https://github.com/documentcloud/backbone/issues/1214
到目前为止,其他答案都是正确的,但他们忘记提及如果导航到的哈希与当前哈希相同,则不会触发任何内容。
【讨论】:
似乎这是唯一真正允许刷新同一页面的答案,谢谢! 我们不应该使用 Backbone.history.getFragment() 这样我们就不会访问历史的属性吗?在我看来似乎更干净。getFragment()
对于更现代的 Backbone 来说肯定是更合适的方法。但是,我会 +1 关于运行声明函数的评论,而不是试图欺骗路由器更新。
另外,较新的 Backbone.Router
类可以接受一个对象,而不是 true/false,Router.navigate(Backbone.history.getFragment(), trigger:true,replace:true);
这将取代现有的导航(它在技术上已经这样做了,因为目标哈希是与当前哈希相同)【参考方案2】:
Router.navigate('about', true);
这样你就可以手动触发路由了。
【讨论】:
【参考方案3】:假设您想要执行此操作的不仅仅是关于页面,请使用:
route = Backbone.history.fragment;
yourRouter.navigate(route, true);
【讨论】:
【参考方案4】:由于 Backbone 路由器会在您要加载的 URL 片段中查找更改,因此对我有用的是首先导航到“/”而不触发,然后导航到您想要使用触发器触发的 URL(片段) .如果您愿意,您可以很容易地将其构建到默认路由器行为中。
例如
App.Routers.appRouter.navigate '/', trigger: false
App.Routers.appRouter.navigate myPath, trigger: true
【讨论】:
【参考方案5】:使用 Backbone 0.9.2,您传入一个选项对象并将 'trigger' 设置为 'true'。
router.navigate('some/route', trigger : true );
参考:http://documentcloud.github.com/backbone/#Router-navigate
【讨论】:
这不适用于重新加载当前路线。如果目标片段与当前片段匹配,则导航返回。【参考方案6】:另一个选项:你可以添加一个带有随机值的参数,这样每次调用的哈希值都会不同,即使你调用的是同一个页面。
【讨论】:
【参考方案7】:感谢@eddywashere 的建议,真的很棒。我添加了一个小编辑来检查您是否在最后一个(最新的)网址上,如果是,则加载该历史记录。很简单,认为它可能会对遇到相同问题的人有所帮助。
$("[data-href]").on("click", function(e)
var href;
e.preventDefault();
href = $(e.currentTarget).data("href");
if ((_.last(this.history)) === href)
return Backbone.history.loadUrl(_.last(this.history));
else
return this.router.navigate(href, true);
);
【讨论】:
愿意用普通的javascript而不是coffeescript分享这个吗?【参考方案8】:router.navigate(route, trigger: false); // Changes URL but it will not trigger...Ex: In place of route -- 'about/1' or 'about' etc
Backbone.history.loadUrl(Backbone.history.fragment); // Changed route will be triggered here.
【讨论】:
以上是关于触发同位置路由的主要内容,如果未能解决你的问题,请参考以下文章
angular-ui-bootstrap model 模态框出现的位置怎么调整
找不到与路径匹配的位置 - Vue 3 + Vue Router 4