从Controller中使用EmberJS transitionToRoute时,如何更正URL路径中的[object%20Object]?

时间:2013-04-02 15:35:03

标签: javascript ember.js

我正在尝试在模板中设置一个动作,以基于动态生成的导航栏将用户转换到另一个路径,使用在客户端执行的json /和js的组合。我已经设法配置我的应用程序,以便我可以生成有效的常规路径,但我想使用转换来避免额外的页面加载。

关于(希望)必要信息的要点是:

https://gist.github.com/rjfranco/5289201

JS:

App.Router.map ->
  @route 'index', {path: "/#{short_name}"}
  @route 'customList', {path: "/#{short_name}/custom-list/:list_name"}
  @route 'multiLevelList', {path: "/#{short_name}/multi-level-list/:list_name/:list_level"}

App.EventController = Em.ObjectController.extend
  goTo: (navbar_icon) ->
    @transitionToRoute navbar_icon.route, navbar_icon.context

# Sample passed navbar_icon
navbar_icon =
  img_src: '/somesource_or_another.jpg'
  display_name: 'My Link Name!'
  route: 'customList'
  context: {list_name: 'Exhibitors'}

模板:

{{#each controller.navbarIcons}}
  <li><a {{action goTo this}}><img {{bindAttr src="image_src"}} width="36" height="36" />{{display_name}}</a></li>
{{/each}}

预期页面实际加载正常,但应用程序转换到的URL不正确,刷新会破坏应用程序。

我期待的网址为:/ruhaha/custom-list/Exhibitors 我最终得到一个像:/ruhaha/custom-list/[object%20Object]

轻微更新 我发现我可以在应用程序上滥用几种方法来产生我想要的结果:

App.handleURL('/ ruhaha /定制列表/参展商)
App.Router.router.replaceURL('/ ruhaha /定制列表/参展商)

这实际上会触发路由,并且在没有页面请求的情况下替换有效地将我的应用程序转换到我想要的状态的URL。虽然这有效但我很确定这是解决这个问题的错误方法。

1 个答案:

答案 0 :(得分:0)

我最终解决了这个问题(在freenode的nerdyworm上有一些帮助),在我的路线中指定了一个序列化方法,它刚刚返回了我期待的参数:

App.CustomListRoute = Em.Route.extend
  serialize: (params) ->
    params