2016-04-04 16 views
0

Ich habe Probleme mit einem Objekt in einem verschachtelten Array von Firebase mit angularfire bekommen.Javascript Get-Objekt in verschachtelten Kind-Array

Die Struktur sieht wie folgt aus:

users { 
    <user1-key>{ 
    events{ 
     <event-key>{ 
     title: "event 1", 
     tasks: { 
      <task-key>{ 
      title: "task 1", 
      isChecked: false 
      }, 
      <task-key>{ 
      title: "task 2", 
      isChecked: false 
      } 
     } 
     } 
    } 
    }, 


    <user 2-key>{ 
    events{ 
     <event-key>{ 
     title: "event 1", 
     tasks: { 
      <task-key>{ 
      title: "task 1", 
      isChecked: false 
      }, 
      <task-key>{ 
      title: "task 2", 
      isChecked: false 
      } 
     } 
     } 
    } 
    } 

} 

Ich habe einen Dienst, die Elemente aus Feuerbasis basierend auf den holt:

app.factory("Events", function ($firebaseObject, $firebaseArray, baseUrl) { 
    ref = new Firebase(baseUrl); 
    refAuth = ref.getAuth(); 
    events = $firebaseArray(ref.child("users/" + refAuth.uid + "/events")); 

    return { 
     all: function() { 
      return events; 
     }, 

     get: function (eventId) { 
      for (var i = 0; i < events.length; i++) { 
       if (events[i].$id === eventId) { 
        return events[i]; 
       } 
      } 
     }, 

     getTasks: function(eventId){ 
      for (var i = 0; i < events.length; i++) { 
       if (events[i].$id === eventId) { 
        return events[i].tasks; 
       } 
      } 
     }, 

     getInnerTask: function(eventId, taskId){ 
     for (var i = 0; i < events.length; i++) { 
      if (events[i].$id === eventId) { 
       event = events[i]; 
       for(var j = 0; j < event.tasks.length; j++){ 
        if(event.tasks[j].$id === taskId){ 
         return event.tasks[j]; 
        } 
       } 
      } 
     } 
    } 


    }; 
}); 

jetzt in meinem Dienst Ich bin in der Lage Veranstaltungen sowie bekommen als ein einzelnes Ereignis. aber ich kann anscheinend keine einzige Aufgabe bekommen. Listen Sie nur die Aufgaben auf. In getInnerTask verwende ich geschachtelte for-Schleifen in der Hoffnung, dass ich die ID auf ähnliche Weise erhalten kann, um die Ereignis-IDs zu bekommen, aber es funktioniert nicht.

hier ist mein Controller für das Einzelereignis:

app.controller("EventsInnerCtrl", function ($scope, $firebaseArray,$firebaseObject, $stateParams, Events) { 

    $scope.event = Events.get($stateParams.eventId); 

    $scope.tasks = Events.getTasks($stateParams.eventId); 
    console.log($scope.tasks); 

    $scope.clickTask = function(){ 
     $scope.task = Events.getInnerTask($stateParams.taskId); 
     console.log($scope.task); // this returns "Undefined" 
    } 


}); 

Sein bemerkenswert, dass meine Ereignisse Ausgabe wie folgt aussieht:

Events console output

und meine Aufgaben heraus gesetzt sieht anders aus (es fehlt die $ ID-Feld in der Ausgabe):

Tasks console output

Antwort

0
getInnerTask: function(eventId, taskId) { 
    for (var i = 0; i < events.length; i++) { 
     if (events[i].$id === eventId) { 
      event = events[i]; 
      for (var j = 0; j < event.tasks.length; j++) { 
       if (event.tasks[j].$id === taskId) { 
        return event.tasks[j]; 
       } 
      } 
     } 
    } 
} 

Meine Vermutung ist, event ist nicht im aktuellen Bereich, kann man nicht in der Lage sind, um Zugang zu ... wie wäre es mit var Stichwort mit event

+0

ich jede Variation versucht haben könnte ich mir vorstellen, aber immer noch nicht Glück – sirJuice

Verwandte Themen