dav*_*tar 7 javascript ember.js
我不能很好地了解你如何支持永久链接.这可能仅仅是因为emberjs不支持永久链接.
我正在构建一个允许用户选择某些报告的UI,所以在ember中这很简单,你只需要添加一个带有id的路由"报告",这样URL就像这样:
#/reports/10/
Run Code Online (Sandbox Code Playgroud)
我需要的是一些额外的参数也存在于该URL中,例如开始和结束日期以及度量标准类型
#/reports/10/metric/impressions/start/10-08-2013/end/11-08-2013
Run Code Online (Sandbox Code Playgroud)
因此,如果我将这些参数粘贴到浏览器中,则需要选取这些参数,重要的是当用户更改这些设置时,例如通过日期选择器,URL应该更新以反映新参数.
编辑:
以下是基于以下答案的jsbin链接和解决方案.http://jsbin.com/ucanam/703
把我的2美分投入到这个主题中.请注意,我在生产中使用这种方法,它工作正常.实际上这个问题有2个部分.
1.我如何拥有多个动态细分?
Mike Grasotti使用嵌套资源描述了一种方法.这种方法有效,但我认为这种方法在这种情况下有点麻烦.
为什么我认为这很麻烦?
路线是分离Ember关注点的一种手段.在这种情况下,我没有看到单独的担忧.在我看来,您正在尝试镜像URL中表单的状态.我认为它应该是一个负责关注"形式状态"的途径.因此,我建议查看以下帖子,其中我描述了如何为每个路由实现多个动态参数:资源嵌套是启用多个动态段的唯一方法吗?
2.当您在表单中只更改了一个参数时,如何触发序列化挂钩来更新URL?
问题是serialize hook只有在使用新模型输入路线时才会触发.我猜你有一些逻辑,它处理更改参数的事件start或end.我想你不会在这种情况下重新进入路线.那么如何在这种情况下再次触发序列化挂钩以更新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);
Run Code Online (Sandbox Code Playgroud)
PS:您可以在这里查看我的制作应用程序.这个应用程序显示在德国电影院最好的电影.即使您不懂德语,也可以单击顶部区域中的某个控件,然后查看更新的URL.我想这几乎和你想要的一样?