javascript - 您如何维护页面状态,以便您可以使用 emberjs 提供永久链接?

标签 javascript ember.js

我不太清楚你们是如何支持永久链接的。这可能只是因为 emberjs 不支持永久链接。

我正在构建一个允许用户选择特定报告的 UI,因此在 ember 中这很简单,您只需添加一个包含 id 的路由“reports”,这样 URL 如下所示:

#/reports/10/

我需要的是一些额外的参数也出现在该 URL 中,例如开始和结束日期以及指标类型,例如

#/reports/10/metric/impressions/start/10-08-2013/end/11-08-2013

因此,如果我将它们粘贴到浏览器中,则需要选取这些参数,重要的是,当用户更改这些设置时,例如通过日期选择器,URL 应该更新以反射(reflect)新参数。

编辑:

这是一个 jsbin 的链接,其中包含基于以下答案的解决方案。 http://jsbin.com/ucanam/703

最佳答案

只需将我的 2 美分投入到这个主题中。请注意,我正在生产中使用这种方法,它工作正常。实际上这个问题有两个部分。

<强>1。我怎样才能拥有多个动态分割?

Mike Grasotti 使用嵌套资源描述了一种方法。这种方法有效,但我认为这种方法在这种情况下有点麻烦。

为什么我觉得它很麻烦?

路由是在 Ember 中分离关注点的一种方式。在这种情况下,我没有看到单独的问题。在我看来,您正试图在您的 URL 中反射(reflect)表单的状态。我认为这应该是负责关注“表单状态”的一条路线。因此我建议看看下面的帖子,其中我描述了如何为每个路由实现多个动态参数:Is resource nesting the only way to enable multiple dynamic segments?

<强>2。当您只更改表单中的一个参数时,如何触发序列化 Hook 来更新 URL?

问题是 serialize hook仅在使用新模型输入路线时触发。我猜你有一些逻辑,处理更改参数的事件 startend .我想您在这种情况下不会重新输入路线。那么在这种情况下如何再次触发序列化钩子(Hook)来更新 URL 呢?我正在我的路由器中处理这样的事件,我正在使用以下代码:

var currentRouteName = this.controllerFor("application").get("currentPath");//the ApplicationController stores the name of the current Route
var url = App.Router.router.generate(currentRouteName);
App.Router.router.updateURL(url);

PS:你可以看看我的生产应用here 。这个应用程序显示德国电影院中最好的电影。即使您不懂德语,也可以单击顶部区域的其中一个控件,然后查看 URL 是否更新。我想这和您想要的差不多吧?

关于javascript - 您如何维护页面状态,以便您可以使用 emberjs 提供永久链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18164461/

相关文章:

javascript - 尽管返回了 Promise,但 Angular Ui-Router TemplateProvider 从未被调用

javascript - 我如何判断元素是否使用 Javascript 或工具建立了新的 block 格式化上下文?

Javascript 到空白文本框值不会工作,但 jquery 确实

javascript - 如何从 DS.Promisearray 获取特定属性数组

javascript - 奇怪的行为 Ember 无限插件

javascript - 在提交表单之前询问用户

javascript - jQuery 函数放置

javascript - 在 ember JS 中获取当前 URL

ember.js - 从子路由过渡到父路由时的 Ember 钩子(Hook)

ajax - Ember - 中止 ajax 请求