child records and ember model

2019-07-20 16:01发布

问题:

[Update]

Thanks for the help so far.

I've been able to create a new Post record with an embedded Comment record with static data. Via this method:

    App.CommentsController = Ember.ArrayController.extend({
      needs: "post",

      actions: {

         addComment: function() {
              var post = App.Post.create({
                title: 'static post'
              });

                  post.get('comments').create({
                    message: 'static message'
                });

                  post.save();

          }

      }

    });

But I'm falling short figuring out how to retrieve the current Post via the CommentsController or Route in order to create Comment records on an already existing Post.

After searching and sifting through random SOs and articles, I've tried an array of methods to call the current Post but still no dice.

I've tried setting var post = App.Post.create to:

var post = App.Post.find(), 
var post = this.get('controllers.post.model'),
var post = this.get('controllers.post.content'),
var post = this.get('controllers.post'),
var post = this.get('post'),

I've also set my CommentsController to have needs: "post".

I've also tried adding:

    App.CommentsRoute = Ember.Route.extend({
        afterModel: function() {
            this.set('post', this.modelFor('post'));
        }
    });

I read a piece that stated actions should be defined in the routes as well, would I need to define my addComment function in the PostRoute?

I'm wondering if I need to use var post = App.Post.find(post) or something of that nature.

Am I on the right track here? Feels like I'm taking shots in the dark at an elephant in a broom closet and still missing...

回答1:

I use Ember-Model with built-in RESTAdapter, but should be compatible with your adapter:

// to add a post
var post = App.Post.create() // assuming your App.Post is your model class
// to add a comment inside it
var comment = post.get('comments').create()

To save, I use

post.save()

Since I am embedding the comments inside the post. If you're not, try call save() on comment object you've created:

comment.save()
post.save()


回答2:

try this

in the post controller when you save the record use this

post.save().then(function(post)     {self.transitionToRoute('comment.create', record);});

then in comments controller

 var post = this.get('comment').create();