0

我正在尝试在模板中设置一个操作,以使用在客户端执行的 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 不正确,刷新会破坏应用程序。

我期待一个类似于以下内容的 URL:/ruhaha/custom-list/Exhibitors
我最终得到一个类似的 URL:/ruhaha/custom-list/[object%20Object]

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

App.handleURL('/ruhaha/custom-list/Exhibitors')
App.Router.router.replaceURL('/ruhaha/custom-list/Exhibitors')

这实际上会触发路由,并替换 url,从而有效地将我的应用程序转换到我想要的状态,而无需页面请求。尽管这可行,但我很确定这是处理此问题的错误方法。

4

1 回答 1

0

我最终通过在我的路由中指定一个刚刚返回我期望的参数的序列化方法解决了这个问题(在 freenode 上的 nerdyworm 的帮助下):

App.CustomListRoute = Em.Route.extend
  serialize: (params) ->
    params
于 2013-04-02T17:54:23.267 回答