简短的回答:这并不重要;使用路由器管理客户端状态将使任何 Ember 应用程序成为“单页应用程序”
几乎按照定义,使用路由器的 Ember.js 应用程序是“单页”——就像 Deif 所说的那样,“单页”基本上意味着对请求有一个初始请求(html + js + css),然后是 javascript Ember 应用程序初始化客户端,并在 Ember 应用程序中导航将导致不同的视图呈现/状态更改/显示数据(服务器返回要由客户端 EmberJS 应用程序显示的数据,而不是用 HTML 包装的内容),但它们都在同一个初始页面中。
这可能会与设置混淆location
。默认情况下,Ember 将 a 附加/#
到 URI,后跟路由路径。您会注意到,当您四处导航时(通过路由转换),后面的片段#
会发生变化——但这仍然都在同一页面上,因此它算作“单页应用程序”。
那么当您单击“返回”按钮时会发生什么?当每个请求从服务器返回一个新的 HTML 页面时,很明显:单击“返回”通过重复 GET 请求将浏览器带到上一个页面。但是在 javascript 应用程序中呢?传统的 JS 单页应用程序可以“破坏”后退按钮——您可能会四处导航,更改客户端的状态,但点击后退按钮会将您返回到上一个网站,而不是您单页的上一个“页面”页面应用程序!
Ember 通过路由器 + 历史位置实现解决了后退按钮损坏的问题——设置location
提供了不同的行为。我认为 location:none
完全禁用历史记录 - 我稍后会尝试。
请参阅:EmberJS 历史位置
和我的 Rails 路由应该如何与 pushState Ember.js 路由一起使用? 和EmberJS 路由指南