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_idPost代具有给定的模型实例id(请参阅此评论)。
  • [B]:此处,PostController将由路由器使用传递的上下文填充:post,这是Post上层检索到的实例(参见 [A])。
  • [C]:PostController是 post 模型实例上的ObjectController(ie Proxy),因此它直接保存评论。
于 2012-08-02T08:05:14.487 回答