管理交易和关系

时间:2012-10-21 21:04:45

标签: ember.js ember-data

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

这将author属性(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);

这是one_to_many_change.js file in Ember Data

的第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应用程序中的常见过程。

1 个答案:

答案 0 :(得分:0)

您的author对象似乎已被修改并附加到默认事务。 然后,您创建一个新事务并在此创建一本书。

然后您需要保留2条记录,这两条记录都是通过关联链接的,但它们位于不同的交易中。

这样做的一种方法是使用author交易来创建您的图书

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