在EmberJS中将记录保留到服务器

时间:2014-02-28 02:54:33

标签: ember.js ember-data

我正在使用Ember 1.4和EmberData beta7。我的Ember-Data模型如下所示:

 /** Ember Data Models **/
 var attr = DS.attr;
 var belongsTo = DS.belongsTo;
 var hasMany = DS.hasMany;

 App.StratLeg = DS.Model.extend({
   legName: attr(),
   quantity: attr(),
   strat: belongsTo('strat')
 });

 App.Strat = DS.Model.extend({
   stratName: attr(),
   stratLegs: hasMany('stratLeg', {async:true})
 });

我在StratsController中创建了一条父记录:

 var nwParent = 
   {id: "parentId",
    stratName: "pName", 
   };

 var newStrat = this.store.createRecord ('strat', nwParent);

然后转换到StratsStratController以获取此新创建的记录并执行以下操作以创建2个子记录并将这些记录附加到父记录:

 var nwChild1 =
 {
  id: "childId1",
  legName: "cName1",
  quantity: '1',
  strat: "parentId"
 };


 var nwChild2 =
 {
  id: "childId2",
  legName: "cName2",
  quantity: '5',
  strat: "parentId"
 };
 var newLeg1 = this.store.createRecord ('stratLeg', nwChild1);
 var newLeg2 = this.store.createRecord ('stratLeg', nwChild2);
 var thisStratLegs = this.get('stratLegs');
 thisStratLegs.pushObject(newLeg1);
 thisStratLegs.pushObject(newLeg2);

如果我执行下面显示的'save'语句,Ember只向父记录发送一条消息给服务器(但发送的父记录不包含'strat'属性); Ember不会自动发送附加的儿童记录。

 this.get('model').save();

将新的父级和新子级持久保存到服务器的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我认为“默认”方式是手动为每个孩子调用save()

然而,这听起来像是embedded records的一个很好的用例(假设您正在使用rails后端)。您的服务器将在stratLeg模型的JSON内的数组中返回strat模型JSON。

如果你不能做嵌入式记录,最后的办法就是尝试用this之类的方式对孩子的save()电话进行批处理。