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
最終的には次のようになります。/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 に答える