如何访问firebase数据库中的节点

时间:2017-07-23 21:45:14

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

我的目标是让每个用户共选择6个玩家。当选择每个玩家时,玩家ID将使用push()方法发送到数据库中名为“总计”的节点。代码写在下面

 var ref = firebase.database().ref().child('players');

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

$scope.players = $firebaseArray(ref);

console.log ($scope.players); 


 $scope.history = [];

 $scope.buy = function(player) {
    //remove if already added locally
    var index = $scope.history.indexOf(player);
    if(index>=0){
        $scope.history.splice(index,1);
        return;
    }

    //remove if already added on firebase 


    //max 6 allowed
    if($scope.history.length>=6){
        alert('max 6 allowed');
        return;
    }

    var selected = $scope.history.reduce(function(a,b){
        a[b.position] = (a[b.position] || 0) + 1;
        return a;
    }, {}) || {};

    if(!selected[player.position] || selected[player.position]<2){
        $scope.history.push(player);
        ref3.push(player.id);
    }else{
        alert('You can add only two players per position');
    }
     };

     $scope.getTotal = function(){
    return $scope.history.reduce(function(tot, p){
        tot = tot - p.price;
        return tot;
    }, $scope.total);
     };    

这就是数据库的结构:

   {
    "players" : [ {
      "R" : 0,
    "Team" : "Industry",
   "Y" : 0,
     "assists" : 0,
     "goals" : 0,
  "id" : 1,
   "name" : "Yasin 'YB' Amusan",
   "position" : "forward",
   "price" : 8000000
     }, {
    "R" : 0,
    "Team" : "Industry",
     "Y" : 0,
   "assists" : 0,
    "goals" : 0,
   "id" : 2,
    "name" : "Hassan 'Hasi' Akinyera",
    "position" : "defender",
     "price" : 5000000
     }],

   "users" : {
 "l3J1TVsFNLMi0Oxg6hz4AJpacE53" : {
  "email" : "awoniyideji@yahoo.com",
  "fullname" : "Djflex11",
  "teamname" : "deji awoniyi",
  "total" : {
    "-Kpl19z_25IEhiCEFrui" : 1,
    "-Kpl1ARqT-v_btJ7OAq2" : 2,
    "-Kpl1AsdodYWVPWWd5xA" : 2,
    "-Kpl1iN7a7PLU-tnkKc4" : 1,
    "-Kpl1j5CtN6c_mnmWLP-" : 1,
    "-Kpl1k0BNCP5NNFV5uX6" : 1
    },
    "userName" : "awoniyideji@yahoo.com",
    "week" : "no", 
     }
     }
     }

我的问题

目标是玩家不能被同一用户选中两次。我的代码目前阻止玩家在本地被选中两次,但可以将相同的玩家ID推送到firebase数据库。我的问题是如何基本上检查总节点,以便所选择的播放器已经被推送过#34;进入数据库,将被删除而不是插入数据库。我知道&#39; indexOf&#39;要用firebase来避免。

1 个答案:

答案 0 :(得分:0)

这应该有效:

<android.support.v4.widget.SwipeRefreshLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/swipelayout">

    <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="fill_vertical"
        >

<WebView
    android:id="@+id/inicio_pagina"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"></WebView>

</android.support.v4.widget.NestedScrollView>

参考文献:

Check for key in JSON

Remove from DB