2013-09-07 16 views
5

Ich verwende Firebase (AngularFire) mit ihrer PHP-API und ich baue das Online-Präsenzsystem auf. https://www.firebase.com/docs/managing-presence.htmlSpeichern mehrerer Firebase-Referenzen

Ich fange an, mit vielen Referenzen zu enden und das fühlt sich falsch an.

Sollten Firebase Refs in Vanilla Vars oder einem Objekt gespeichert werden?

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); 
     } 
    }); 
}); 

ODER

$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); 
    } 
}); 

meine ich nicht eine Best Practices Frage zu machen. Firebase ist so neu, dass ich nichts brechen will, was mir vielleicht noch nicht bewusst ist.

Antwort

9

Es gibt absolut kein Problem mit dem Erstellen mehrerer Firebase-Referenzen oder angularFire-Objekte (das ist in der Tat ermutigt). Sie können die child Funktion verwenden, um den Code etwas zu bereinigen:

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

Danke für die '.child' Spitze, sehr nützlich. Ich wickelte die Wurzelreferenz in einer eckigen Fabrik ein und rief '.child' für alle anderen Bedürfnisse jetzt an. Das Ergebnis fühlt sich sehr sauber an. – SimplGy

Verwandte Themen