Ember.js 管理交易和关系

Ember.js 管理交易和关系,ember.js,ember-data,Ember.js,Ember Data,我正试图在一个有两个belongsTo关系的模型上管理ember数据事务(创建和提交记录)。最初,我只是使用(在Coffeescript中)将新记录添加到事务中: @transaction.createRecord(App.Book,{作者:App.router.authorController.get('content')}) 这会将author属性(即DS.belongsTo关系)设置为当前author,然后在表单中,用户会设置书籍的其他属性,包括选择元素(比如出版商)中的另一个belong

我正试图在一个有两个belongsTo关系的模型上管理ember数据事务(创建和提交记录)。最初,我只是使用(在Coffeescript中)将新记录添加到事务中:
@transaction.createRecord(App.Book,{作者:App.router.authorController.get('content')})

这会将author属性(即DS.belongsTo关系)设置为当前author,然后在表单中,用户会设置书籍的其他属性,包括选择元素(比如出版商)中的另一个belongsTo关系。这很好,但是如果用户创建第二条新记录,我会得到以下断言:

Ember.assert(“更改关系中的所有记录必须在同一事务中。当一条记录位于“+t+”中,另一条记录位于“+prev,t==prev”中时,您尝试更改记录之间的关系)

这是从第203行开始的

我认为这意味着我必须手动将所有相关的模型对象添加到事务中。因此,我可以使用以下方法将作者模型添加到事务中:

author = App.router.authorController.get('content')
@transaction.add(author)
然后对事务中可能受影响的任何发布者模型执行相同的操作(我在控制台中执行这些操作)。但是,当我执行此操作时,会出现以下错误:

错误:断言失败:一旦记录发生更改,您就不能将其移动到其他事务中


即使已提交上一个(原始)事务,也会发生这种情况。只是想知道其他人是如何处理这个问题的。我认为在事务中分配这种关系必须是Ember数据应用程序中的常见过程。

看起来您的
作者
对象已被修改并附加到默认事务。 然后创建一个新事务,并在此事务上创建一本书

然后,您有2条需要持久化的记录,这两条记录都通过关联进行链接,但它们位于不同的事务上

一种方法是使用
author
事务创建您的书籍

var book = author.get('transaction').createRecord(App.Book, {author: author});

我认为您在这里的断言:“即使上一个(原始)事务已提交,也会发生这种情况”要么与这两者相关,因为当您要添加作者时,服务器响应尚未到达。你能应用我在公关中建议的快速修复方法,并告诉我它是否有效吗?@sly7_7谢谢!那个请求似乎解决了我的问题。。。希望它能很快合并。我将添加一个关于拉请求的评论。我不知道这个PR是否正确,它似乎太简单了。但无论如何,使用指向此处的链接对其进行更新是件好事:)我一直在做的是在提交事务后对其调用.removeCleanRecords()。我认为,当我们能够将脏记录移动到不同的事务中时,这不会成为问题。