【问题标题】:How to submit a form with related model data in ember-data 1.0?如何在 ember-data 1.0 中提交带有相关模型数据的表单?
【发布时间】:2013-12-03 14:21:48
【问题描述】:

我正在根据表单数据和另一个承诺(用于相关记录)创建一条记录。

这是我关注的基本 JSON

//appointment
{
  "id": 6,
  "details": "test",
  "customer": 1
}

//customer
{
  "id": 1,
  "name": "Sle eep",
  "appointments": [6]
}

我的 ember-data 模型如下所示

App.Appointment = DS.Model.extend({
  details: attr('string'),
  customer: belongsTo('customer', { async: true})
});

App.Customer = DS.Model.extend({
  name: attr('string'),
  appointments: hasMany()
});

当我创建约会时,它目前看起来像这样

this.store.find('customer', 1).then(function(customer) {
  var appointment = {
    details: 'foo',
    customer: customer.get('id')
  }
  this.store.createRecord('appointment', appointment).save();
});

上面的问题是我的序列化器在表单数据是一个承诺时表现不佳。这是我应该如何创建记录吗?如果不是,这个创建应该是什么样子?

提前谢谢你

更新

再环顾四周后,似乎 belongsTo 上的 async: true 可能是问题所在。就在“createRecord”之前,我可以看到以下内容

对象{详细信息:“asd”,客户:1}

但是当我跳入 ember-data 的“createRecord”方法(在 RESTAdapter 中)时,我注意到现在客户再次被表示为一个承诺(不是我在调用该方法之前看到的整数值或字符串值)

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    为什么不在创建记录和发送之前等待解决问题?

    var self = this,
        promise = this.store.find('customer', 1); //just to show it's a promise
    
    promise.then(function(customer){
    
      var appointment = {
        details: 'foo',
        customer: customer
      }
      self.store.createRecord('appointment', appointment).save();
    },{
      alert("uh oh end of the world, couldn't find customer");
    });
    

    Async 没有很好的文档记录,并且似乎有一些无用的副作用(它仍处于测试阶段,所以我还没有做出重大判断)。话虽这么说,你的约会 hasMany 没有定义,这是一个游乐场。

    http://emberjs.jsbin.com/OlaRagux/5/edit

    【讨论】:

    • 我在上面添加了更多细节 - 似乎 async: true 可能是此示例中问题的一部分
    • 是的,我不会怀疑,异步有点不稳定,请参阅更新的答案。
    • 我创建了一个带有 ember-data 的问题,因为它看起来像你提到的库中的一个错误 github.com/emberjs/data/issues/1542
    猜你喜欢
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多