2

使用 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 商店的常见用途。我忽略了什么吗?

提前致谢。

(编辑玩家或大厅确实会在任何地方正确更新对象。所以这只会在删除记录时出现。)

4

0 回答 0