4

在玩 ember 时,我试图同时拯救父母和孩子。我注意到孩子的 parent_id 总是被设置为零。

然后我在 GitHub 上看到了这个问题。似乎该功能已从 Ember-Data 中删除,但稍后将恢复。在那之前,我们将推出我们自己的适配器来做到这一点。

阅读@tomdale 的回复,实施起来似乎并不难,但我有一些实施问题。

您如何判断记录的 belongsTo 关联何时发生了变化?这将在什么适配器钩子下进行?

谢谢!

4

1 回答 1

0

商店跟踪与特殊对象的关系变化。您可以向商店询问更改对象的关系,如下所示:

store.relationshipChangeFor(child.get('clientId'), belongsToAssociationName);

如果没有进行任何更改,它将不会返回任何内容。

但很可能你永远不需要这样做。在关系数据存储的情况下,子记录将负责保持其 belongsTo 关联。成功创建/更新后,您可以盲目地将所有这些关系标记为已解决,并且商店不会关心其中一些实际上是否不脏。

事实上,这正是现在所做DS.RESTAdapter的:

DS.RESTAdapter = DS.Adapter.extend({
  // ...

  didSaveRecord: function(store, record, hash) {
    record.eachAssociation(function(name, meta) {
      if (meta.kind === 'belongsTo') {
        store.didUpdateRelationship(record, name);
      }
    });

    store.didSaveRecord(record, hash);
  }

  // ...
});

无论何时何地您决定准备将关系标记为已解决,只需调用store.didUpdateRelationship(child, belongsToAssociationName).


话虽如此,真正的诀窍并不是将关系标记为已解决(因为这已经实现了)——它是将子节点的保存延迟到父节点创建之后。

我们实际上已经提交了一个拉取请求,就是这样做的。如果它对您的帮助与对我们的帮助一样多,我们将感谢您对请求的支持。

于 2012-11-17T17:51:40.130 回答