2013-09-07 17 views
5

Sto utilizzando Firebase (AngularFire) con le loro API PHP e sto creando il sistema di presenza online. https://www.firebase.com/docs/managing-presence.htmlMemorizzazione di più riferimenti Firebase

Sto iniziando a finire con un sacco di riferimenti e questo sembra sbagliato.

I valori di Firebase devono essere conservati in velle di vaniglia o in un oggetto?

controllers.controller('SocialCtrl', function($scope, angularFire) { 
    var onlineRef = new Firebase($scope.main.firebaseUrl + "https://stackoverflow.com/users/" + $scope.main.userId + "/online"); 
    $scope.online = {}; 
    angularFire(onlineRef, $scope, "online"); 

    var usersRef = new Firebase($scope.main.firebaseUrl + "/users"); 
    $scope.users = {}; 
    angularFire(usersRef, $scope, "users"); 

    var productRef = new Firebase($scope.main.firebaseUrl + "/products/" + $scope.main.serieId); 
    $scope.product = {}; 
    angularFire(productRef, $scope, "product"); 

    var connectedRef = new Firebase($scope.main.firebaseUrl + "/.info/connected"); 
    connectedRef.on("value", function(snap) { 
     if (snap.val() === true) { 
      onlineRef.onDisconnect().set(Firebase.ServerValue.TIMESTAMP); 
      onlineRef.set(true); 
     } 
    }); 
}); 

O

$scope.fire = { 
    refs: { 
     online: new Firebase($scope.main.firebaseUrl + "https://stackoverflow.com/users/" + $scope.main.userId + "/online"), 
     users: new Firebase($scope.main.firebaseUrl + "/users"), 
     product: new Firebase($scope.main.firebaseUrl + "/products/" + $scope.main.serieId), 
     connected: new Firebase($scope.main.firebaseUrl + "/.info/connected") 
    } 
}; 

angularFire($scope.fire.refs.online, $scope, "fire.online"); 
angularFire($scope.fire.refs.users, $scope, "fire.users"); 
angularFire($scope.fire.refs.product, $scope, "fire.product"); 
angularFire($scope.fire.refs.connected, $scope, "fire.connected"); 

$scope.fire.refs.connected.on("value", function(snap) { 
    if (snap.val() === true) { 
     $scope.fire.refs.online.onDisconnect().set(Firebase.ServerValue.TIMESTAMP); 
     $scope.fire.refs.online.set(true); 
    } 
}); 

non intendo per rendere questo un best practice domanda. Firebase è così nuovo che non voglio rompere qualcosa di cui forse non sono a conoscenza.

risposta

9

Non c'è assolutamente alcun problema con la creazione di più riferimenti Firebase o angularFire (che è, di fatto, incoraggiato). È possibile utilizzare la funzione child per ripulire il codice un po ':

angular.module("myapp", ["firebase"]). 
value("URL", "https://my-firebase.firebaseio.com/"). 
controller("SocialCtrl", function($scope, URL, angularFire) { 
    var ref = new Firebase(URL); 
    angularFire(ref.child("users"), $scope, "users"); 
    angularFire(ref.child("users/" + $scope.main.userId + "/online", $scope, "online"); 
    angularFire(ref.child("products/" + $scope.main.serieId, $scope, "products"); 
    ref.child(".info/connected").on("value", ...); 
} 
+0

Grazie per la punta '.child', molto utile. Ho avvolto il riferimento di root in una fabbrica angolare e chiamo '.child' per tutti gli altri bisogni ora. Il risultato è molto pulito. – SimplGy

Problemi correlati