所以我试图做的是触发并加载一个视图,当有人去我的网站用我的路由找不到的URL。我这样做是为了让访问者可以通过访问domain.com/username处理没有标签路由的骨干路由
来查看用户配置文件由于用户名是动态的,我无法定义路由,我将如何完成我需要的触发?
所以我试图做的是触发并加载一个视图,当有人去我的网站用我的路由找不到的URL。我这样做是为了让访问者可以通过访问domain.com/username处理没有标签路由的骨干路由
来查看用户配置文件由于用户名是动态的,我无法定义路由,我将如何完成我需要的触发?
您可以处理,在路由器:
var myRouter = Backbone.Router.extend({
routes: {
'/:username': findUsername,
'*path': notFound
}
findUsername: function(usernme) {
//Find username
//Username param comes from URL
},
notFound: function() {
//Handle not found page
}
});
的一个需要注意的是,当你的应用程序加载时,您需要启动骨干历史与{ pushState: true }
new myRouter();
Backbone.history.start({ pushState: true });
你不能这样做 - 在URL片段上的骨干路由,而不是URL本身,所以这个路由不会触发 – Bojangles
你是对的。我更新了代码以从URL中删除域。谢谢! – ricardohdz
您的代码仍然会执行相同的操作。您可以传递路由器的_any_模式进行匹配,并且它只会匹配URL片段_not_路径名 – Bojangles
你不能做到这一点与骨干网,因为它只是路由器在URL片段(散列),而不是URL本身。使用HTML5 History API将不起作用,因为这是直接导航到URL。
您的唯一选择是在服务器上进行路由,并为其提供一个包含所有Backbone客户端逻辑的页面。
你可能会破解window.location.pathname
,但这不是最理想的,可能会导致比平常更多的眼泪。
我认为你必须做一个服务器端重写来处理这种情况。服务器应该将'domain.com/username'视为'domain.com'(可选地,您可能需要在服务器上进行验证,首先是用户名实际存在)。 – McGarnagle
为什么你不想使用哈希?他们可以导航到domain.com/#username。 – 1nfiniti