HasMany - BelongsTo与RESTAdapter Ember.js

时间:2015-02-15 18:09:16

标签: javascript node.js ember.js ember-data sails.js

尝试使用RESTAdapter创建一个属于许多的。本质上我有一张卡(推特用户),有很多主题标签。我正在使用ember-cli。

我的模特:

//models/card.js
import DS from 'ember-data';

export default DS.Model.extend({
    handle: DS.attr('string'),
    bio: DS.attr('string'),
    avatar: DS.attr('string'),
    hashtags: DS.hasMany('hashtag')
});


//models/hashtag.js
import DS from 'ember-data';

export default DS.Model.extend({
    title: DS.attr('string'),
    print: DS.attr('boolean'),
    card: DS.belongsTo('card')
});

我的卡片路线

import Ember from 'ember';

export default Ember.Route.extend({
    model: function(){
        return this.store.createRecord('card');
    },

    actions: {
        submitHandle: function () {
            var card = (this.currentModel);
            var store = this.store;
            var hashtag = store.createRecord('hashtag');

            card.set("bio", "testbio");
            card.set("avatar", "twitter.com/129012931/img_original.jpg");

            hashtag.set("title", "EmberJS");
            hashtag.set("print", false);
            hashtag.set("card", card);

            card.get('hashtags').addObject(hashtag);

            card.save();
        }
    }
});

在我的路线中,当用户输入推特名称时,我正在制作虚拟卡片和标签。我将标签添加到卡片标签中。在余烬方面,这一切都很有效。如果我不调用card.save(),则卡和#标签会按预期关联。当我调用.save()时,发布的请求是:

card: {handle: "@testing123", bio: "testbio", avatar: "twitter.com/129012931/img_original.jpg"}

没有提到标签。

我在后端使用风帆,似乎保存了请求中提供的任何内容。

如果我尝试这样的话:     hashtag.save()。then(function(){         card.save()     });

我尝试过,因为我认为在Ember将其与卡关联之前,我可能需要服务器上的ID标签。主题标签请求如下:

{"hashtag":{"title":"EmberJS","print":false,"card":null}}

请卡:

{"card":{"handle":"@wiolsid","bio":"testbio","avatar":"twitter.com/129012931/img_original.jpg"}}

1 个答案:

答案 0 :(得分:1)

一些新手的考虑因素。

  1. 尝试创建这样的#标签:

    var hashtag = store.createRecord('hashtag', {card: card});
    

    然后你不需要card.get('hashtags').addObject(hashtag);

  2. 在保存父模型之前保存子模型。

  3. 这是我为尝试类似任务而创建的小提琴: