2

私はEmberのルーター(v1.0.pre)を単一の動的セグメントで使用していて、本当に満足しています。
たくさんの魔法

しかし、私は複数の動的セグメントに苦労しています。

  • 何をserialize()/deserialize()返す必要がありますか?
  • transitionTo()呼び出しとそこでのコンテックスはどのように見えるべきですか?

誰かがこれに光を当てることができますか?

4

1 に答える 1

5
  • serializeまた、コンテキスト オブジェクトにカスタム シリアル化がある (つまり、ember-data モデル インスタンスではない)deserialize場合にのみ実装する必要があります。したがって、完全な ember スタックを使用している間は、これらのメソッドを実装する必要はありません。

  • transitionToルート イベント ハンドラーから呼び出す必要があり、コンテキストは次のように渡されます。

showPost: function (router, event) {
  var post = event.context;
  router.transitionTo('posts.show', post);
}

showPostイベントが次のようなヘルパーによってトリガーされた場合action:

{{#each post in controller}}
  <a {{action showPost post}}>Show post {{post.title}}</a>
{{/each}}

複数のコンテキスト オブジェクトを渡すことで、より複雑な遷移を実現できます (深くネストされたルートの場合)。

router.transitionTo('posts.member.comments.show', post, comment);

post&commentコンテキストは適切なルートに渡されますが、ルーティングはネストされたルートに降ります。


編集

ember-data がなければ、次のようになります。

posts: Ember.Route.extend({
  route: 'posts',

  member: Ember.Route.extend({
    route: '/:post_id',

    show: Ember.Route.extend({
      route: '/'
    }),

    comments: Ember.Route.extend({
      route: 'comments',

      show: Ember.Route.extend({
        route: '/:comment_id'
      })
    })
  })
})

そして、クラス メソッドとインスタンス プロパティを持つ 2 つのクラス& がありますApp.PostApp.Commentfindid

App.Post = Ember.Object.extend({
  id: null
});
App.Post.reopenClass({
  find: function (id) {
    // retrieve data, instanciate & return a new Post
  }
});

App.Comment = Ember.Object.extend({
  id: null
});
App.Comment.reopenClass({
  find: function (id) {
    // retrieve data, instanciate & return a new Comment
  }
});
于 2012-08-09T12:49:38.883 に答える