尝试使用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"}}
答案 0 :(得分:1)
一些新手的考虑因素。
尝试创建这样的#标签:
var hashtag = store.createRecord('hashtag', {card: card});
然后你不需要card.get('hashtags').addObject(hashtag);
。
在保存父模型之前保存子模型。
这是我为尝试类似任务而创建的小提琴: