Backbone.js在不重新加载页面的情况下更改url

Backbone.js在不重新加载页面的情况下更改url,backbone.js,pushstate,Backbone.js,Pushstate,我有一个网站,有一个用户页面。在该页面上,有几个链接可供您浏览用户的个人资料。我希望这样,当点击其中一个链接时,url会改变,但包含用户横幅的页面的上三分之一不会重新加载 我正在使用Backbone.js 我有一种感觉,我正处于这样一种情况,我对我正在处理的问题的理解如此之差,以至于我问了一个错误的问题,所以请让我知道在这种情况下路由器是否是你的朋友。基本上,创建一个具有多个不同路由的路由器。您的路线将调用不同的视图。这些视图只会影响您定义的页面部分。我不确定这段视频是否有用,但它可能会让您了解

我有一个网站,有一个用户页面。在该页面上,有几个链接可供您浏览用户的个人资料。我希望这样,当点击其中一个链接时,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()