更新Firebase上所有子元素的排名
我在Firebase上一次更新整个阵列的等级时遇到问题 我有以下代码:更新Firebase上所有子元素的排名,firebase,Firebase,我在Firebase上一次更新整个阵列的等级时遇到问题 我有以下代码: var playersList = new Firebase('https://INSTANCE.firebaseio.com/players'); var rank = 1200; function createNewPlayer(firstname) { var newplayer = new Firebase('https://INSTANCE.firebaseio.com/players/' + firs
var playersList = new Firebase('https://INSTANCE.firebaseio.com/players');
var rank = 1200;
function createNewPlayer(firstname) {
var newplayer = new Firebase('https://INSTANCE.firebaseio.com/players/' + firstname);
newplayer.setWithPriority({first : firstname},rank);
}
我想为PlayerList中的每个元素设置优先级。很容易更新列表中每个玩家的排名:
function updatePlayers() {
playersList.on('child_added', function(snapshot) {
snapshot.ref().setPriority(snapshot.getPriority()+1);
});
}
在这段代码中,我只是将值增加1
Firebase API中没有批量操作。但我怀疑他们会让事情比上面的片段更简单
一个更简单的解决方案可能是简单地存储玩家得分或排名标准作为优先级。然后你可以把它们拿来,等它们到了再点。例如,假设我们按分数对他们进行排名:
还有,看看firebase。恐怕你得一个接一个地做。你想让所有人都有等级1200吗?顺便说一句,firebase中没有阵列。
var myUserId = 'kato';
var ref = new Firebase('https://INSTANCE.firebaseio.com/players/');
function updateMyPoints(newScore) {
ref.child(myUserId).setPriority(newScore);
}
function fetchAndRankTopPlayers(callback) {
ref.limit(100).endAt().once('value', function(snap) {
var players = [];
snap.forEach(function(ss) {
players.push({id: ss.name(), score: ss.getPriority()});
});
});
}
fetchAndRankTopPlayers(function(list) {
console.log('the 3rd place player is ' + list[2].id);
});