Javascript 复制ember.js上的嵌套模型(成功保存后)

Javascript 复制ember.js上的嵌套模型(成功保存后),javascript,ember.js,model,ember-data,Javascript,Ember.js,Model,Ember Data,我有一个模型活动,它有嵌套的模型、故事和域 App.Campaign = DS.Model.extend({ name: DS.attr('string'), stories: DS.hasMany('story'), domains: DS.hasMany('domain') }); App.Domain = DS.Model.extend({ domain: DS.attr('string'), campaigns: DS.hasMany('camp

我有一个模型活动,它有嵌套的模型、故事和域

App.Campaign = DS.Model.extend({
    name: DS.attr('string'),
    stories: DS.hasMany('story'),
    domains: DS.hasMany('domain')
});

App.Domain = DS.Model.extend({
    domain: DS.attr('string'),
    campaigns: DS.hasMany('campaign')
});

App.Story = DS.Model.extend({
    title: DS.attr('string'),
    campaign: DS.belongsTo('campaign')
});
在控制器中,我以以下方式创建currentCampaign:

this.currentCampaign = this.store.createRecord('campaign');
var campaignDomains = this.get('currentCampaign.domains');
var domainObj = this.store.createRecord('domain', {
    "domain": domain
});
campaignDomains.addObject(domainObj);

var campaignStories = this.get('currentCampaign.stories');
var story = this.store.createRecord('story', {
    "id": this.generateUUID(), // Generate uniqid
    "title": storyTitle,
});
campaignStories.pushObject(story);
并以这种方式添加故事和域:

this.currentCampaign = this.store.createRecord('campaign');
var campaignDomains = this.get('currentCampaign.domains');
var domainObj = this.store.createRecord('domain', {
    "domain": domain
});
campaignDomains.addObject(domainObj);

var campaignStories = this.get('currentCampaign.stories');
var story = this.store.createRecord('story', {
    "id": this.generateUUID(), // Generate uniqid
    "title": storyTitle,
});
campaignStories.pushObject(story);
保存后(在调用Transitiono方法之前,我看到在模板上复制域和故事)。当我进入页面编辑活动时,我也会看到重复的域和故事。刷新页面后-我看到正常数据(通过刷新,这些数据正在从服务器获取)

请求后JSON(域id在服务器端生成,故事id在客户端生成):

对POST请求的响应(通过添加新活动):

序列化程序文件

App.CampaignSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
    attrs: {
        domains: {embedded: 'always'},
        stories: {embedded: 'always'}
    }
});
余烬1.8.1
余烬数据1.0.0-beta.14.1

我想你遇到了一个问题

我不得不降级到ember data 1.0.0-beta.12关于故事(故事id在客户端生成)我使用了这个.store.push 而不是this.store.createRecord-这很好用

关于我所了解的域-这是bug ember.js。在github上,我发现了一些关于这个bug的讨论

现在我使用一个黑客,以避免重复数据,我希望在未来这个错误将得到修复,我删除我的黑客

var self = this;
this.get('currentCampaign').save().then(function() {
    self.get('currentCampaign.domains').toArray().forEach(function(domain) {
        if (domain.get('isNew')) {
            domain.deleteRecord();
        }
    });
    self.transitionToRoute('campaigns');
})

您使用的是哪个版本的ember和embed数据?@Kingpin2k添加了版本。如果您在jsbin上复制此问题,则更容易确定…@KalmanHazins在jsbin上我们无法模拟服务器的响应。是的,但始终存在mockjax。。。你需要
toArray()
在那里吗?@KalmanHazins是的,因为没有toArray()调用移除工作不正确-在循环中我们有麻烦,因为我们超出了数组长度。