我正在尝试更新网址但在主干中使用标签时不会导航页面,因此可以将标签添加为书签,当我从我的代码库运行它时它什么都不做,
app.Router.navigate('groups/teams', { trigger:false });
但是,如果我在我的控制台中运行它,它会更改来自' http://app.local/groups'的网址。到' http://app.local/groups#groups/teams'为什么要添加#
?我想将网址更新为' http://app.local/groups/teams'。
我是否错误地使用了路由器?我的路由器很简单,
var app = app || {};
var Router = Backbone.Router.extend({
routes: {
'groups' : 'groups'
},
groups: function() {
alert("Groups");
}
});
app.Router = new Router();
答案 0 :(得分:0)
通常,如果您有以下网址:
www.example.com/foo
foo部分被认为是在example.com服务器上指示名为“foo”的资源。因此,如果客户端(即Javascript代码)将用户重定向到“www.example.com/bar”,则之后将无法执行任何操作,因为浏览器会将用户带到新页面完全(使用全新的Javascript代码)。
大多数(但不是全部)现代浏览器都实现了一个名为pushstate的功能,它可以解决这个问题并允许客户端将URL设置为“www.example.com/bar”,而不会让浏览器返回服务器并且请求该页面。但是,由于并非所有浏览器都支持pushstate,因此Backbone默认不使用它。
相反,Backbone利用了旧的网络技术:锚点/哈希(即www.example.com/#foo)。如果您不希望它这样做,则必须在启动路由器时传递pushState: true, hashChange: false
选项。但是,即使你这样做,如果浏览器不支持pushstate,Backbone仍然会回退到基于哈希的导航,所以不能保证它不会仍然执行“#bar”的事情。
我的建议是调整为让所有客户端路由都基于哈希,但如果您确定所有用户都将使用支持推送状态的浏览器,则可以使用该方法。支持推送状态的浏览器可以在这里找到:
http://caniuse.com/#search=pushstate
希望有所帮助。
答案 1 :(得分:0)
散列片段(#page)用于提供这些永久链接,但随着History API的到来,
设置pushState ture:
Backbone.history.start({pushState: true, root: "/public/search/"})
答案 2 :(得分:0)
将此代码添加到路由器初始化:功能
$('body').delegate('a[href]:not([href^=\#])', 'click', function (e) {
e.preventDefault();
Backbone.history.navigate($(this).attr('href'), {trigger: true});
});
它适用于我的情况