【问题标题】:Looping between child nodes in firebase在firebase中的子节点之间循环
【发布时间】:2018-02-12 04:18:56
【问题描述】:

我正在开发一个包含大约 50 名玩家的奇幻网络应用程序。下面是我的网络应用程序的模拟数据库:

Users {
   John: {
       Selection: [1,2,3]
   },
   Mark: {
       Selection: [1,2,4]
   } 
}

Players {
1: {
    name: 'Messi',
    agility: 90
},
2: {
    name: 'Beckham',
    agility: 54
},
3: {
    name: 'Rooney',
    agility: 10
},
4: {
    name: 'Neymar',
    agility: 84
}
}

在示例中客户端选择“Mark”和“John”之后,考虑到“Users”节点和“Players”节点是数据库树中的不同子节点,有没有办法说使用相应用户的选择数组循环播放器数组?

如果是这样,这种循环是否会导致每个客户端的选择都反映在客户端上

每个客户端的选择代码如下:

  var ref = firebase.database().ref("players");
  var ref3 = firebase.database().ref("users").child(uid).child("total");

  $scope.players = $firebaseArray(ref);
  $scope.selected = $firebaseArray(ref3);

“ref”是 firebase 数据库中 50 名玩家的数组,而“ref3”是客户端创建的 6 名玩家数组。

有没有办法映射或循环播放器数组以搜索“ref3”数组中的 6 个选定播放器?

【问题讨论】:

    标签: javascript angularjs firebase web-applications firebase-realtime-database


    【解决方案1】:

    可以将选择ids 映射到players

    function getSelectedPlayers(selection, players, meta) {
        return selection.map((id) => { ...meta, player: players[id] });
    }
    

    比方说,我们想要得到约翰的选定球员。我们可以这样写:

    getSelectedPlayers(Users.John.Selection, Players, { uid: 'l30n4rd0' });
    

    【讨论】:

    • 谢谢。该函数是否不必考虑每个客户的 uid?以便每个客户端的 uid 根据他们选择的对象映射到特定的玩家?
    • 这里的函数只关心选择。如果您想在映射数据中返回更多信息,您可以修改函数谓词以获取额外参数并在对象术语中返回。
    • 我已经稍微编辑了这个问题。映射仍然可以像编辑一样工作吗?我尝试使用 player 数组映射选定的数组,但没有成功。
    猜你喜欢
    • 2018-03-05
    • 2014-09-06
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多