管理交易和关系

我试图在拥有两个belongsTo关系的模型上管理ember-data事务(创建和提交记录)。 在开始时,我只是简单地将新记录添加到使用(在Coffeescript中)的@transaction.createRecord(App.Book, {author: App.router.authorController.get('content')})@transaction.createRecord(App.Book, {author: App.router.authorController.get('content')})

这将作者属性(这是DS.belongsTo关系)设置为当前作者,然后在表单中设置该书的其他属性,包括来自select元素(比如说发布者)的另一个belongsTo关系。 这工作正常,但如果用户去创建第二个新纪录,我会得到以下断言:

Ember.assert("All records in a changed relationship must be in the same transaction. You tried to change the relationship between records when one is in " + t + " and the other is in " + prev, t === prev);

这是来自Ember Data中one_to_many_change.js文件的第203行

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

author = App.router.authorController.get('content')
@transaction.add(author)

然后对可能在交易中涉及的任何发布商模型(我在控制台中执行这些操作)执行相同的操作。 但是,当我这样做时,我得到以下错误:

Error: assertion failed: Once a record has changed, you cannot move it into a different transaction

即使先前(原始)交易已被提交,也会发生这种情况。 只是想知道别人怎么处理这个问题。 我想象在事务内分配这种关系必须是Ember Data应用程序中的常见过程。


它看起来像您的author对象被修改并附加到默认事务。 然后你创建一个新的交易并在这一个上创建一本书。

然后您有2条记录需要保留,两条记录都通过关联进行关联,但它们位于不同的事务处理中。

一种做法是使用author交易来创建你的书

var book = author.get('transaction').createRecord(App.Book, {author: author});
链接地址: http://www.djcxy.com/p/64069.html

上一篇: Managing transactions and relationships

下一篇: Single record persistence with ember