我有这些模型:Ember.js 2,多点击,多关系,如何处理多次点击?
扑灭:
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();
});
}
});
但是有一个问题,当与服务器的互联网连接速度很慢。
如果我点击很多绰号,代码检查斗争的实际状况,它说:“没有球队开(用)在这里,我需要一个新的”,正如你所想象的(因为互联网是蹩脚的)只用一名球员创造了很多球队,就像我点击每个昵称一样多。
我该如何解决这个问题?
我需要类似队列的东西吗?
也许我可以点击一个玩家,然后在检查过程中如果再次点击我可以排队下一个玩家?但我需要立即显示添加的球员列表。
如何?
这种逻辑最好保存在服务器上(确定是否需要新团队)。如果其他用户同时尝试,则会出现同样的问题。让服务器决定是否需要新的团队。 –
谢谢史蒂夫,以及如何处理新的球员?因为我需要立即撰写清单... –