我一直在研究各种 RIA,并注意到有些人使用或请求JavaScript Routing。只是浏览一下“JavaScript 路由”看起来像是一种遍历您的网站的方式......但我可以使用一个简单的链接。这意味着我绝对“不明白”。
所以...
- 路由为您提供了常规锚点或链接没有的什么?
- 它仅适用于某些环境吗?(即 ASP.NET 或直接 HTML)
- 它是干什么用的?
- 什么目的推动了它的存在?
我一直在研究各种 RIA,并注意到有些人使用或请求JavaScript Routing。只是浏览一下“JavaScript 路由”看起来像是一种遍历您的网站的方式......但我可以使用一个简单的链接。这意味着我绝对“不明白”。
所以...
路由是一种组织和管理应用程序状态的方式。JavaScript 中的路由框架可帮助您更改应用程序的状态——也许从一个管理面板部分移动到另一个管理面板部分——同时保持应用程序的持久性。
如果您想从一个应用程序状态(例如/admin/users
)导航到另一个应用程序状态(例如 )/admin/orders
,您可以按照您的建议使用普通链接。但随后您将导致浏览器从一个 HTML 页面导航到另一个 HTML 页面。显然,这是人们在 Web 上导航的正常方式。但是在 JavaScript 应用程序中,这是非常低效的!
如果您在 JavaScript 中运行一个复杂的浏览器内应用程序,那么该应用程序在启动时需要做很多工作。它注册事件处理程序,加载和执行一堆 JavaScript,有时动态呈现整个页面界面(在 ExtJS 和其他一些库的情况下)。浏览器需要做很多额外的工作来设置一个 JavaScript 应用程序,/admin/orders
它与/admin/users
. 更有效的方法是让链接触发应用程序监视的事件,并让应用程序通过更改应用程序的状态来响应——可能通过删除或隐藏用户视图并将其替换为订单视图。路由是一种表示这些不同接口的方式,使用一个令牌——通常是一个 URL 片段,如/admin/users
--跟踪用户在您的界面中的位置。
这允许应用程序维护已经消耗时间并使用内存创建的动态对象模型。它使用户界面响应更快,并且,如果您通过主题标签或 pushState 使用 URL 历史管理,它允许用户使用浏览器的后退和前进按钮在您的应用程序中导航,而无需重新加载每次页面并擦除您的应用程序状态。URL 管理还允许深度链接到应用程序中的某些页面:加载时,应用程序的路由器检查它接收到的路由字符串,对其进行标记,并加载您在路由表中指定的接口。
管理持久性不需要路由,但它是组织持久性状态的好方法。通常,路由系统与 URL 历史管理密切相关,例如 Davis.js。但也有一些路由库不会与 URI 混淆,它们维护一个抽象的标记化状态,您可以使用或显示您认为合适的状态,例如Crossroads.js。