Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
灵活JavaScript单页应用的路由?_Javascript_Backbone.js_Router_Hashbang - Fatal编程技术网

灵活JavaScript单页应用的路由?

灵活JavaScript单页应用的路由?,javascript,backbone.js,router,hashbang,Javascript,Backbone.js,Router,Hashbang,我正在构建一个单页web应用程序(因为我希望在页面/状态之间移动时具有灵活性和速度),但我正在为路由/URL而挣扎 在传统范例中,我会有如下URL: example.com/tools/population-tool/#currentYear=1950 example.com/tools/income-tool/#country=usa example.com/nice-story/ example.com/nice-chapter/nice-story/ 现在我想用一个路由器(例如使用主干网

我正在构建一个单页web应用程序(因为我希望在页面/状态之间移动时具有灵活性和速度),但我正在为路由/URL而挣扎

在传统范例中,我会有如下URL:

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对象来存储必要的页面信息:

pages : {
  tools : {
    template : "#tools",
    breadcrumb : ["Home","Tools"]
  }
  nice-story : {
    template : "#nice-story",
    breadcrumb : ["Home","Stories","Nice Story"]
  }  
}
使用路由器,我现在希望加载正确的内容和页面状态,给定url,如:

example.com/#/工具/人口工具/?当前年份=1950

如果不使用Hashbang,则如下所示:

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


您将如何组织此路由,使url方案在保持灵活性的同时有意义,并允许重定向和新的查询字符串参数?

这不是您问题的完整答案,但有一些关于主干网的提示

您可能希望在路由器上定义一个类似loadPage()的方法,该方法可以清空主页容器,并将其替换为与应用程序中的每个“页面”对应的视图。每个路由操作都可以调用它来加载右视图

如果要使用伪查询字符串,请确保在主干路由中显式地为它们添加匹配器。例如:

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

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

谢谢您的回复!这是否意味着要将所有页面明确列为路由?我希望有一个更简单的解决方案,比如:page/:subpage/?*params??谢谢。如果你愿意,你可以这样做。然后,您只需将所有逻辑移到一个路由函数中,该函数可以检查“pages”对象。我认为更常见的是定义1:1的页面路由,但这取决于您的用例。我发现了这个主干插件:github.com/jhudson8/backbone-query-parameters。你只要插上电源就可以开始了。