使用父路由参数和ember-data的正确方法?

dec*_*hov 2 ember.js ember-data ember-old-router

在我的应用程序中,我试图保持路由结构尽可能接近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.

Mik*_*ski 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'),
  // ...
});
Run Code Online (Sandbox Code Playgroud)

这应该是有效的:

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);
      },
    }),
  })
})
Run Code Online (Sandbox Code Playgroud)
  • [A]:根据惯例,路由器将自动检索post模型实例:post_id引用Post具有给定的模型实例id(请参阅此注释).
  • [B]:这里,PostController将由路由器填充传递的上下文:post,这是Post上面检索的实例(参见[A]).
  • [C]:PostController是post模型实例上的ObjectController(ie Proxy),因此它直接保存注释.