gpt4 book ai didi

javascript - 主干路由器

转载 作者:行者123 更新时间:2023-12-04 03:31:23 26 4
gpt4 key购买 nike

我正在尝试更新 URL 但在 Backbone 中使用选项卡时不导航页面,以便可以为选项卡添加书签,当我从我的代码库运行它时它什么都不做,

app.Router.navigate('groups/teams', { trigger:false });

但是,如果我在我的控制台中运行它,它会将 url 从“http://app.local/groups”更改为' 到 ' http://app.local/groups#groups/teams ' 为什么要添加 #?我想将 URL 更新为“http://app.local/groups/teams” '.

我是否错误地使用了路由器?我的路由器很简单,

        var app = app || {};

var Router = Backbone.Router.extend({

routes: {

'groups' : 'groups'

},

groups: function() {
alert("Groups");
}

});

app.Router = new Router();

最佳答案

通常当你有一个像这样的 URL 时:

www.example.com/foo

foo 部分被认为表示 example.com 服务器上名为“foo”的资源。因此,如果客户端(即 Javascript 代码)将用户重定向到“www.example.com/bar”,之后它将无法执行任何操作,因为浏览器会将用户带到一个新页面完全(使用全新的 Javascript 代码)。

大多数(但不是全部)现代浏览器都实现了一个名为 pushstate 的功能,它可以解决这个问题并允许客户端将 URL 设置为“www.example.com/bar”,而无需实际让浏览器返回到服务器并要求那个页面。然而,由于并非所有浏览器都支持 pushstate,因此 Backbone 默认不使用它。

相反,Backbone 利用了一项古老的网络技术: anchor /哈希(即 www.example.com/#foo)。如果您不希望它这样做,您必须在启动路由器时传递 pushState: true, hashChange: false 选项。然而,即使您这样做了,如果浏览器不支持 pushstate,Backbone 仍然会回退到基于散列的导航,因此不能保证它不会仍然执行“#bar”操作。

我的建议是调整所有客户端路由都基于哈希,但如果您确定所有用户都将使用支持推送状态的浏览器,则可以使用该方法。支持推送状态的浏览器可以在这里找到:

http://caniuse.com/#search=pushstate

希望对您有所帮助。

关于javascript - 主干路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25178074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com