2013-05-16 97 views
0

所以我试图做的是触发并加载一个视图,当有人去我的网站用我的路由找不到的URL。我这样做是为了让访问者可以通过访问domain.com/username处理没有标签路由的骨干路由

来查看用户配置文件由于用户名是动态的,我无法定义路由,我将如何完成我需要的触发?

+0

我认为你必须做一个服务器端重写来处理这种情况。服务器应该将'domain.com/username'视为'domain.com'(可选地,您可能需要在服务器上进行验证,首先是用户名实际存在)。 – McGarnagle

+1

为什么你不想使用哈希?他们可以导航到domain.com/#username。 – 1nfiniti

回答

1

您可以处理,在路由器:

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 }); 
+0

你不能这样做 - 在URL片段上的骨干路由,而不是URL本身,所以这个路由不会触发 – Bojangles

+0

你是对的。我更新了代码以从URL中删除域。谢谢! – ricardohdz

+0

您的代码仍然会执行相同的操作。您可以传递路由器的_any_模式进行匹配,并且它只会匹配URL片段_not_路径名 – Bojangles

0

你不能做到这一点与骨干网,因为它只是路由器在URL片段(散列),而不是URL本身。使用HTML5 History API将不起作用,因为这是直接导航到URL。

您的唯一选择是在服务器上进行路由,并为其提供一个包含所有Backbone客户端逻辑的页面。

你可能会破解window.location.pathname,但这不是最理想的,可能会导致比平常更多的眼泪。