2011-11-18 48 views
2

我正在构建一个单一的网页应用程序(因为我想跨越页面/状态时的灵活性和速度),但我努力与路由/网址...灵活的JavaScript单页面应用程序的路由?

在传统的范例我会有这样的网址为:

example.com/tools/population-tool/#currentYear=1950 
example.com/tools/income-tool/#country=usa 
example.com/nice-story/ 
example.com/nice-chapter/nice-story/ 

现在我想和一个路由器,以取代本(例如,使用主链)加载针对相应路由模板和控制器。

我在想有网页对象,用于存储必要的页面信息:

pages : { 
    tools : { 
    template : "#tools", 
    breadcrumb : ["Home","Tools"] 
    } 
    nice-story : { 
    template : "#nice-story", 
    breadcrumb : ["Home","Stories","Nice Story"] 
    } 
} 

与路由器,我现在想的负载正确的内容和页面状态,获得一个网址,如:

example.com/#!/tools/population-tool/?currentYear=1950

或这样如果不使用Hashbang:

example.com/tools/population-tool/?currentYear=1950

你将如何组织此路由,这样的URL方案是有道理的,同时仍然灵活,允许重定向和新的查询字符串PARAMATERS?

+0

我发现这个主干插件:github.com/jhudson8/backbone-query-parameters。你刚插上它,你就准备好了。 – PreslavLe

回答

2

这不是一个完整的回答你的问题,但对骨干网的一些技巧...

您可能要定义你的路由器上像loadPage()的方法可以清空并更换主页容器其视图对应于您应用中的每个“页面”。每个路由动作都可以调用它来加载正确的视图。

如果您将使用伪查询字符串,请确保在您的Backbone路由中明确添加匹配器。例如:

'/tools/population-tool/?*params' 

这将使用整个params字符串作为第一个参数来调用您的路由操作。你需要解析...

+0

感谢您的回复!这是否意味着将所有页面明确列为路由?我希望有一个更简单的解决方案,如':page /:subpage /?* params'?谢谢。 – dani

+0

如果你愿意,你可以这样做。然后,您只需将所有逻辑移入一个路由功能,即可检查您的“页面”对象。我认为定义1:1的页面路由更为常见,但这取决于你的用例。 – maxl0rd