我使用的是localstorage适配器。我有两个对象:一个Flow和一个Param,一个Flow hasMany
Params,同样一个Param belongsTo
一个流。我的代码中有一个函数,它复制了另一个对象。当我从控制器调用该函数时,一切正常(并且参数的isSaving
位为false,isDirty
位也为假 - 所以看起来保存正在进行)。
但是,当我重新加载页面时,belongsTo
关系不会加载,尽管所有其他关系/属性加载正常。
这是重复功能:
// elem is the Flow I'm duplicating, newFlowJSON is the JSON I'll use to create it.
function dupFlow(_store, newFlowJSON, elem) {
var newFlow = _store.createRecord('flow', newFlowJSON);
newFlow.save();
var newFlowParams;
newFlow.get('params').then(function(params) {
newFlowParams = params;
elem.get('params').then(function(p) {
var params = p.toArray();
for (var i=0; i < params.length; i++) {
var newParamJSON = params[i].toJSON();
delete newParamJSON.id;
delete newParamJSON.flow;
var newParam = _store.createRecord('param', newParamJSON);
newFlowParams.pushObject(newParam);
newParam.set('flow', newFlow);
newParam.save();
}
});
});
// couldn't figure out a good way to save the newFlow after all the params were pushed
setTimeout(function() {
newFlow.save();
}, 500);
}
我的简化模型:
App.Flow = DS.Model.extend({
title: DS.attr('string'),
params: DS.hasMany('param', {async: true})
});
App.Param = DS.Model.extend({
paramName: DS.attr('string'),
flow: DS.belongsTo('flow', {async: true})
});
答案 0 :(得分:0)
抱歉,我的评论超时了。我可以稍后修复它们,只是想确保预先刷新重复的Ember-Data关系正在持续。
你试过DS.belongsTo('flow',{embedded: 'always'})
吗? embedded Docs。我在我的应用程序中使用它们,我承认这有点尴尬,但在刷新时,商店模型重新获得他们需要的冠军。
<强>更新强>
因此,如果您没有为此设置序列化程序,那可能是导致问题的原因,因为它处理关系工作。在那里扔FlowApp.ApplicationSerializer = DL.LSSerializer.extend();
。看看这个part of the README。这是一件很容易忽视的小作品。
答案 1 :(得分:0)
好吧,我通过使belongsTo
关系不是异步来解决我的问题。考虑到Ember已经表示异步关系最终将成为标准,这似乎不是一个很好的解决方案。但我认为现在没有更好的解决方案。
问题似乎源于JSONSerializer。
serializeBelongsTo: function(record, json, relationship) {
var key = relationship.key;
var belongsTo = get(record, key);
key = this.keyForRelationship ? this.keyForRelationship(key, "belongsTo") : key;
if (isNone(belongsTo)) {
json[key] = belongsTo;
} else {
json[key] = get(belongsTo, 'id');
}
if (relationship.options.polymorphic) {
this.serializePolymorphicType(record, json, relationship);
}
},
目前,问题在于belongsTo.get
未返回承诺。因此,在我的代码中,当belongsTo关系是异步时,get
(这是Ember.get的简写)每次都返回undefined。我认为更全面的解决方案将涉及找出如何访问商店而不是使用get
,但我不知道如何做到这一点。如果我有时间搞清楚,我会修改这个答案。