2

私のアプリでは、ルーティング構造をAPI構造にできるだけ近づけようとしています。これは、基本的なケースでは残り火が容易になりますが、次のケースについてはまだ混乱しています。

http://emberjs.com/guides/outlets/#toc_nestingの例を参照して)

データを取得するための最良の方法は何ですか/posts/:post_id/comments(データがによって私に与えられていないと仮定します/posts/:post_id)?

App.Comment.find(...)メソッドで、なんらかの方法で投稿IDを渡す必要がありcomments.deserialize(...)ますか?投稿IDを取得するより良い方法はありrouter.getPath('postController.content._id')ますか?変更したDS.RESTAdapterを使用しています。

4

1 に答える 1

5

親ルーターのパラメーターは、子ルートのパラメーターとしてはアクセスできなくなりましたが、中間データ構造を取得してデータを取り込むために使用する必要がありました。

モデルが次のように定義されているとします。

App.Post = DS.Model.extend({
  text: DS.attr('string'),
  // ...
  comments: DS.hasMany('App.Comment')
});

App.Comment = DS.Model.extend({
  // You may also have: "post: DS.belongsTo('App.Post')", but we do not care for this exemple
  text: DS.attr('string'),
  // ...
});

これは機能しているはずです:

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

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

    connectOutlets: function (router, post) {
      var applicationController = router.get('applicationController');
      applicationController.connectOutlet('post', post); // [B]
    },

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

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

      connectOutlets: function (router) {
        var postController = router.get('postController'),
            comments = postController.get('comments'); // [C]
        postController.connectOutlet('comments', comments);
      },
    }),
  })
})
  • [A]:post modelインスタンスは、慣例に従って、ルーターによって自動的に取得されます:指定されたモデルインスタンスをpost_id参照します(このコメントを参照)。Postid
  • [B]:ここでPostControllerは、ルーターによって渡されたコンテキストが入力されます:post、これはPost上位に取得されたインスタンスです([A]を参照)。
  • [C]: post modelインスタンスPostControllerObjectController(ie Proxy)であるため、コメントを直接保持します。
于 2012-08-02T08:05:14.487 に答える