我正在尝试创建一个新的子记录(注释)并将其保存到现有的父记录(Post).我使用的是Ember-Model,而不是Ember-Data,但是我会非常感谢任何提示或指示.
目前,我已经成功创建了一个新的嵌入式注释,但只有在使用新的Post记录创建它时.所以:
如何加载/检索当前加载的Post(父记录)以便将Comments(子记录)应用于它?
我一直在阅读控制器依赖项,使用需求:和this.controllerFor和this.modelFor,以便访问另一个控制器/模型的内容,但无法将这些内容连接成有意义的东西.
无论如何,这是我已经将我的应用程序代码缩减到的地方,希望我能够偶然发现这样做的正确方法……
路线
App.Router.map(function() { this.resource('post',{ path: '/:post_id' },function() { this.resource('comments',{ path: '/comments'} ); }); });
我删除了所有其他资源&路由,所以我留下了App.Post,App.PostIndex和App.Comments.我认为我的路线是这里的问题,我假设我没有正确实现在我的评论路线中使用加载的Post记录的方法.
App.IndexRoute = Ember.Route.extend({ model: function() { return App.Post.find(); },setupController: function(controller,model) { // I'm not certain if this controller.set('content',model); // setupController is needed? } }); App.PostRoute = Ember.Route.extend({ model: function(params) { return App.Post.find(params.post_id); },setupcontroller: function( controller,model) { // again,unsure if this this.controllerFor('post').get('comments'); // is correct. controller.set('content',comments); } }); App.CommentsRoute = Ember.Route.extend({ afterModel: function() { this.set('post',this.modelFor('post')); },model) { this.controllerFor('post').get('comments'); controller.set('content',comments); } });
调节器
App.CommentsController = Ember.ArrayController.extend({ needs: "post",actions: { addComment: function() { var post = App.Post.create({ title: 'static post title' }); post.get('comments').create({ message: 'static message' }); post.save(); } } });
这是我目前的评论控制器,它可以创建一个带有嵌入式评论的新帖子.我已经找到并给出了许多创建评论的例子,但似乎没有一个对我有用.基本上,我正在努力将var post = …定义为当前加载的记录.我尝试了各种方法尝试试用&错误.到目前为止,我尝试过:
> var post = App.Post.create();,返回属性undefined,因为这会创建一个新记录.但是,我给了它一个镜头,因为我看到与此相关的每个例子都定义了它们的记录.
> var post = this.get(‘post’);,返回一个无法在未定义时调用’get’.我尝试过使用这种方法在Comments控制器和Post控制器上定义我当前的帖子.
> var post = this.get(‘controllers.post.content);,从我正在使用的后端返回’循环错误’.
> var post = App.Post.find();,返回一个无法在undefined上调用’get’.
> var post = App.Post.find(1);,再次,返回一个不能在undefined上调用’get’.想我会试一试,因为这是人们提供的那些反复出现的例子之一.我使用的后端将自己的ID应用于每个记录,我不确定我是否能够/如何让.find()方法使用动态ID值并仅检索刚刚加载的模型.
我猜我没有正确设置我的路由和控制器依赖项?
如果有人有建议,相关链接或修复我将非常感激.
解决方法
App.CommentsController = Ember.ArrayController.extend({ actions: { addComment: function() { this.content.createRecord({ message: 'static message' }); } } });
Ember Data Beta 2及更高版本:
App.CommentsController = Ember.ArrayController.extend({ needs: ["post"],actions: { addComment: function() { var post = this.get('controllers.post'); var comment = this.get('store').createRecord('comment',{ message: 'static message',post: post }); comment.save().then(function() { post.addobject(comment); // You may or may not need to save your post,too. In my case my backend handles // the inverses of relationships (if existing),so there's no need. We still need // to do this for Ember,though }); } } });