首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ember - "location: none“是创建单页面应用程序所需的唯一更改吗?

Ember - "location: none“是创建单页面应用程序所需的唯一更改吗?
EN

Stack Overflow用户
提问于 2013-05-08 17:21:30
回答 3查看 482关注 0票数 1

我一直在研究使我的应用程序成为单页面应用程序的方法,当我在StackOverFlow上发布的另一个问题中被告知路由器方法是最新的StateManager样式时,我正在考虑使用Ember。经过多次尝试,我偶然发现了Router定义中的"location: none“选项,并使用了我的应用程序屏幕不再直接访问的选项。我仍然因为Router而使用路由,但是仅仅因为这一个变化,我的应用程序就真的变成了单页面Ember应用程序吗?或者,我还需要配置单页的哪些其他属性才能使其成为真正的单页Ember应用?

谢谢,

稻田

EN

回答 3

Stack Overflow用户

发布于 2013-05-08 23:49:17

让我们定义一下什么是单页应用程序(SPA)。在PHP和ASP.NET统治互联网的日子里,web服务器会发布包含静态内容的静态页面。

内容是动态的,Javascript允许我们在服务器不做任何事情的情况下替换页面的一部分。这是SPA的关键,没有规则和代码来定义它。这是服务器最初提供给用户的单个页面,然后用户请求内容,而不是不同的页面。

因此,如果您的应用程序只提供单个页面,并且在没有从服务器请求另一个页面的情况下注入或取出内容,那么您可以将其视为SPA。在大多数使用这种设计的项目中,你会看到它们只有一个'index.html‘页面,其他的都是javascript文件和模板文件。这就是作为SPA的全部含义。

票数 1
EN

Stack Overflow用户

发布于 2013-05-09 11:07:09

简短回答:这并不重要;使用路由器来管理客户端状态将使任何Ember应用程序成为“单页面应用程序”

几乎根据定义,使用路由器的Ember.js应用程序是“单页面”--正如Deif所说,“单页面”基本上意味着请求有一个初始请求(html + js + css),然后在客户端初始化javascript Ember应用程序,在Ember应用程序中导航将导致不同的视图呈现/状态更改/要显示的数据(服务器返回要由客户端EmberJS应用程序显示的数据,而不是包装在HTML中的内容),但它们都在同一个初始页面中。

这可能会与location设置混淆。默认情况下,Ember会将/#附加到URI,后跟路由路径。您会注意到,当您在周围导航(通过路线转换)时,#后面的片段会发生变化--但这一切仍然在同一个页面上,因此它被算作“单页面应用程序”。

那么当你点击“后退”按钮时会发生什么呢?当每个请求都从服务器返回一个新的HTML页面时,很明显:单击“上一步”会通过重复GET请求将浏览器带到上一个页面。但在javascript应用程序中又如何呢?传统的JS单页应用程序可以“破坏”后退按钮--您可能会四处导航,更改客户端的状态,但单击“后退”按钮会返回到上一个网站,而不是单页应用程序的上一个“页面”!

Ember绕过了路由器+历史位置实现的后退按钮中断的问题-- setting location 提供了不同的行为。我认为location:none完全禁用了历史记录--我稍后再试。

请参阅:EmberJS History LocationWhat should my Rails routes look like to work with pushState Ember.js routes?EmberJS Routing Guide

票数 1
EN

Stack Overflow用户

发布于 2013-08-30 06:48:05

舍温·余和德夫都是正确的。除此之外,location的默认实现(即HashLocation)将您的应用程序作为SPA进行维护的原因是由于fragment identifiers的一个特定属性,这在section 4 of this blog post中进行了很好的总结。(具有讽刺意味的是,这篇文章没有使用片段in,所以我不能直接将您链接到相关部分。)

看看this jsFiddle周围。您可能会注意到使用散列实现的一个主要优点:

代码语言:javascript
运行
复制
<a href="#/third">third template</a>

可添加书签的链接可以直接链接到应用程序中的特定路由,无需大惊小怪。

我认为这里可能发生的事情是这样的:许多SPA框架都没有提供像Ember的路由器位置这样的东西。使用它们,一旦你加载了页面,url就永远不会改变。因此,当Ember开始处理浏览器历史记录时,您会看到url发生了变化,很自然地会怀疑您构建的这个东西是否仍然是SPA。(一开始我也被吓跑了!)请放心,它是一个SPA。如果它让你感觉更舒服,使用location: 'none'来保持单一页面的美感;Ember不会在意,但你的用户可能会。;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16436958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档