Ember.js 2,很多点击,很多关系,如何处理很多点击?

时间:2017-06-19 13:00:50

标签: javascript ember.js ember-data relationship

我有这些模特:

扑灭

export default Model.extend({
  teams: hasMany('team')
});

团队

export default Model.extend({
  closed: attr('boolean'),
  fight: belongsTo('fight'),
  players: hasMany('player')
}); 

播放器

export default Model.extend({
  team: belongsTo('team'),
    nickname: belongsTo('nickname')
});

昵称

export default Model.extend({
  nickname: belongsTo('nickname')
});

现在我在战斗页面,我有一个昵称列表,点击我需要的每个昵称到:

  • 如果没有参赛队伍(这个模型)我创建了一个团队,之后我将我的玩家插入该团队;
  • 如果有一支球队已经在战斗并且“没有关闭”我只是将我的球员插入最后一支球队;
  • 如果有一支球队已经在战斗并且“已经关闭”我需要为这支新球员和所有其他新球员添加一支新球队,直到球队关闭为止。

所有内容都适用于此代码:

fight.get('teams').then((all_teams) => {
    let count_teams = all_teams.get('length');

    if (count_teams > 0) {
        let last_team = all_teams.objectAt(count_teams - 1);
        if (last_team.get('closed') === false) {
            saveNewPlayer(last_team);
        } else {
            saveNewTeam();
        }
    } else {
        saveNewTeam();
    }

    function saveNewTeam() {
        let new_team = store.createRecord('team', {
            fight: fight
        });
        new_team.save().then((new_team) => {
            saveNewPlayer(new_team);
        }).catch(() => {
            new_team.rollbackAttributes();
        });
    }

    function saveNewPlayer(last_team) {
        let newPlayer = store.createRecord('player', {
            team: last_team
        });
        newPlayer.save().then(() => {
            // handle aftersave
        }).catch(() => {
            newPlayer.rollbackAttributes();
        });
    }

});

但是当与服务器的互联网连接速度很慢时会出现问题。

如果我点击许多昵称代码检查战斗的实际状态,它说:“没有团队在这里打开(可用),我需要一个新的”并且你可以想象(因为互联网是蹩脚的)它只用一个玩家创造了很多团队,就像我点击每个昵称一样多。

我该如何解决这个问题?

我需要像队列一样的东西吗?

也许我可以点击一个播放器然后在检查期间如果我再次点击我可以排队下一个播放器?但我需要立即显示添加的球员名单。

如何?

1 个答案:

答案 0 :(得分:0)

为了防止向服务器发送大量请求,最好防止下一个请求。还有其他选择,例如禁用按钮,忽略下一步操作等。

我们正在使用ember-concurrency插件来处理此类用例。它明显地放弃了下一步行动。