使用 ember-data,我尝试删除多对多关系中的记录。
我有一个玩家和大厅对象。一个大厅有 1 个所有者和许多玩家。玩家可以是许多大厅的所有者和许多大厅的成员。
我的模型:
App.Lobby = DS.Model.extend({
title : DS.attr("string"),
owner : DS.belongsTo("App.Player", {
inverse : "ownedLobbies"
}),
players : DS.hasMany("App.Player", {
inverse : "joinedLobbies"
})
});
App.Player = DS.Model.extend({
username : DS.attr("string"),
ownedLobbies : DS.hasMany("App.Lobby", {
inverse : "owner"
}),
joinedLobbies : DS.hasMany("App.Lobby", {
inverse : "players"
})
});
在我的 LobbyController 和 PlayerController 中,我这样做:
Ember.ObjectController.extend({
doDelete : function (model) {
model.deleteRecord();
model.one("didDelete", this, function () {
this.transitionToRoute("index");
});
model.get("transaction").commit();
}
});
didDelete 很好地触发,所以转换确实发生了.. 当记录被删除时,例如一个玩家:
- 任何以该玩家为所有者的大厅都将在其所有者列表中删除该玩家。(如此成功的一对多关系)
- 任何只有该玩家作为成员的大厅仍会显示该玩家,但所有属性都设置为已清除(用户名空白,..)。(所以失败了多对多的关系)
删除大厅时也是如此,因此,如果大厅被删除:
- 任何拥有该大厅的玩家都会在其“拥有的大厅”列表下删除大厅(如此成功的一对多关系)
- 作为该大厅成员的任何玩家,仍将在其“joinedLobbies”下拥有该大厅,但所有属性都设置为已清除(标题空白,..)(多对多关系失败)
尝试删除该空白记录时,出现以下错误:
尝试
deleteRecord
在 rootState.loading 状态下处理事件。未定义调用
我在互联网上找不到任何解决此问题的方法。许多人提到 ember-data 仍然存在漏洞,但这看起来像是 ember 商店的常见用途。我忽略了什么吗?
提前致谢。
(编辑玩家或大厅确实会在任何地方正确更新对象。所以这只会在删除记录时出现。)