无法将Ember对象设置为包含彼此的引用

时间:2013-12-07 04:38:59

标签: ember.js ember-data

回答

我已经解决了这个问题,它与我的适配器有关,我会在答案中发布更多信息, 但是这里有一个问题的链接我正在使用修复Ember get not getting certain attribute

原始问题

我有以下代码:

customerSignUp: function () {
    var customer = this.get('store').createRecord('customer', {
        description: 'Why hello sir'
    });
    var model = this.get('model');
    model.set('customer', customer);
    customer.save().then(function() {
        model.save().then(function() {
            customer.set('user', model);
            customer.save();
        });
    });
}

使用以下支持模式:

App.User = App.Person.extend({
    name: DS.attr('string'), // Actually their primary email.
    customer: DS.belongsTo('customer', {async: true })
});

App.Customer = DS.Model.extend({
    user: DS.belongsTo('user', {async: true}),
    description: DS.attr('string')
});

(App.Person只传递了一些命名约定)

customerSignUp函数试图让两个对象引用另一个,这样任何一个都可以根据需要从另一个获取属性(user模型是计划在未来拥有更多这样的关系,这样一个用户就可以在网站上拥有多个“角色”。

问题在于我无法让两者稳定地互相引用。通过当前的实现,模型(用户)指向客户就好了,但客户出于某种原因只是将其用户字段设置为Ember Debugger中的<computed>,并且保存在数据库中的记录甚至都没有有一个user字段。在我看来,我的保存中的某些会覆盖值或更改底层对象,因此它们不再是真的吗?老实说,我只是困惑。

我已尝试saveset s的各种不同排序,但到目前为止只有一个有效,或者如果两者都有效,那是因为我没有保存其中一个到数据库。有什么建议?这甚至是必要的吗?即使customer中没有明确存储ID,user对象也可以访问customer吗?

这可能与adapter I'm using

有关

更新

实现customerSignUp

customerSignUp: function () {
    var model = this.get('model');
    var customer = this.get('store').createRecord('customer', {
        description: 'Why hello sir',
        user: model
    });
    customer.save().then(function() {
    model.set('customer', customer);
        model.save();
    });
}

customer上的user关系暂时设置 ,但随后重置为null。 user关系仅为<computed>,我认为没有设置。

1 个答案:

答案 0 :(得分:0)

这与我的适配器有关。

此功能:

serializeBelongsTo: function(record, json, relationship) {
      console.log("serializeBelongsTo");
      var attribute, belongsTo, key;
      attribute = relationship.options.attribute || "id";
      console.log(attribute);
      key = relationship.key;
      console.log(key);
      belongsTo = Ember.get(record, key);
      console.log(belongsTo);
      if (Ember.isNone(belongsTo)) {
        return;
      }
      var content = belongsTo.content;
      console.log(content);
      var temp = Ember.get(belongsTo, attribute);
      console.log(temp);
      json[key] = temp;
      console.log(json);
      if (relationship.options.polymorphic) {
        return json[key + "_type"] = belongsTo.constructor.typeKey;
      }
      else {
        return json;
      }
即使undefinedEmber.get(belongsTo, attribute)已正确设置,

也会从belongsTo返回attribute的值,尽管belongsTo将其数据隐藏在{{1}中对象,这是SO post details