使用hasMany关系在商店中创建新记录

时间:2013-10-27 18:53:40

标签: ember.js ember-data

使用以下模型和商店,我可以使用FIXTURES成功加载数据,如下所示。

App.Item = DS.Model.extend({
   itemName: DS.attr('string'),
   strategy: DS.belongsTo('strat')
});

App.Strat = DS.Model.extend({
    stratName: DS.attr('string'),
    items: DS.hasMany('item',{async:true})

App.Store = DS.Store.extend({
    adapter: DS.FixtureAdapter
});

App.StratLeg.FIXTURES =
[
{id: 1, itemName: 'I1', strategy: 1},
{id: 2, itemName: 'I2', strategy: 2},
{id: 3, itemName: 'l3', strategy: 2},
];

App.Strat.FIXTURES =
[
{id: 1, stratName: 's1', items: [1]},
{id: 2, stratName: 's2', items: [2,3]}
];

<小时/> 但是当我尝试使用javascript添加新记录时,我遇到了各种各样的错误。按照DS.store的EmberData-API文档中的示例,我尝试了:

var pushData = {
  strat: [{id: 100, stratName: "s5", items: [101]}],
    item: [{id: 101, itemName: "I5", strategy: 100}]};

this.store.push ('strat', pushData);

这会产生以下错误:

“你必须在传递给'push'的哈希中包含'id'。

我也试过了store.createRecord的各种版本,导致了不同的错误。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

根据您是否使用最新版本的ember数据,您可以使用pushPayload并以此格式推送它们(而不是复数格式的键)

 var pushData = {
     strats: [{id: 100, stratName: "s5", items: [101]}],
     items: [{id: 101, itemName: "I5", strategy: 100}]
 };

 store.pushPayload('strat', pushData);

http://emberjs.jsbin.com/OHUcIx/1/edit