我已经解决了这个问题,它与我的适配器有关,我会在答案中发布更多信息, 但是这里有一个问题的链接我正在使用修复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
字段。在我看来,我的保存中的某些会覆盖值或更改底层对象,因此它们不再是真的吗?老实说,我只是困惑。
我已尝试save
和set
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>
,我认为没有设置。
答案 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;
}
即使undefined
和Ember.get(belongsTo, attribute)
已正确设置,也会从belongsTo
返回attribute
的值,尽管belongsTo
将其数据隐藏在{{1}中对象,这是SO post details。