Backbone.js在不重新加载页面的情况下更改url
我有一个网站,有一个用户页面。在该页面上,有几个链接可供您浏览用户的个人资料。我希望这样,当点击其中一个链接时,url会改变,但包含用户横幅的页面的上三分之一不会重新加载 我正在使用Backbone.jsBackbone.js在不重新加载页面的情况下更改url,backbone.js,pushstate,Backbone.js,Pushstate,我有一个网站,有一个用户页面。在该页面上,有几个链接可供您浏览用户的个人资料。我希望这样,当点击其中一个链接时,url会改变,但包含用户横幅的页面的上三分之一不会重新加载 我正在使用Backbone.js 我有一种感觉,我正处于这样一种情况,我对我正在处理的问题的理解如此之差,以至于我问了一个错误的问题,所以请让我知道在这种情况下路由器是否是你的朋友。基本上,创建一个具有多个不同路由的路由器。您的路线将调用不同的视图。这些视图只会影响您定义的页面部分。我不确定这段视频是否有用,但它可能会让您了解
我有一种感觉,我正处于这样一种情况,我对我正在处理的问题的理解如此之差,以至于我问了一个错误的问题,所以请让我知道在这种情况下路由器是否是你的朋友。基本上,创建一个具有多个不同路由的路由器。您的路线将调用不同的视图。这些视图只会影响您定义的页面部分。我不确定这段视频是否有用,但它可能会让您了解路由器如何与页面交互: 下面是一个基本示例:
myapp.Router = Backbone.Router.extend({
routes: {
'link1': 'dosomething1',
'link2': 'dosomething2',
'link3': 'dosomething3'
},
dosomething1: function() {
new myapp.MyView();
},
dosomething2: function() {
new myapp.MyView2();
},
dosomething3: function() {
new myapp.MyView3();
}
});
然后您的url将如下所示:www.mydomain.com/#link1
另外,由于
标记将自动调用页面刷新,请确保您正在调用.preventDefault();如果您不想刷新页面,请单击它们。我的错误是假设主干中有一种特殊的内置方式来执行此操作。没有
只需运行以下代码行
window.history.pushState('object or string', 'Title', '/new-url');
将导致浏览器的URL更改而不重新加载页面。您可以立即在浏览器中打开javascript控制台,并在此页面上进行尝试。详细说明其工作原理(如中所述)
现在,我刚刚将以下事件绑定到document对象(我正在运行单页站点):
有关更多信息,请参阅
请注意,您可以将选项
pushstate:true
传递给对Backbone.history.start()的调用,但这只是为了直接导航到某个页面(例如example.com/exampleuser/followers)将触发主干路由,而不是简单地无处可去 您还可以调用window.location='/#/'+page\u uri
触发主干的路由。@这里是Sven,但我关心的是实际路由——即没有“#”主干的路由。路由器有一个自0.9.0版以来的版本。
bindEvents: () ->
$(document).on('click', 'a', @pushstateClick)
pushstateClick: (e) ->
href = e.target.href || $(e.target).parents('a')[0].href
if MyApp.isOutsideLink(href) == false
if e.metaKey
#don't do anything if the user is holding down ctrl or cmd;
#let the link open up in a new tab
else
e.preventDefault()
window.history.pushState('', '', href);
Backbone.history.checkUrl()