2016-04-04 16 views
0

Köşeli dizideki bir nesneyi anesteziyi kullanarak ateş kemerinden almakla uğraşıyorum.javascript iç içe geçmiş çocuk dizideki nesneyi al

yapısı aşağıdaki gibidir:

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

} 

Ben kullanıcılara dayanmaktadır Firebase öğeleri getirir bir servis var:

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


    }; 
}); 

şimdi benim hizmetinde ben olayları almak mümkün yanı sıra tek bir olay. ama tek bir görev alabiliyorum gibi görünmüyor. sadece görevleri sıralar. getInnerTask içinde olay kimlikleri elde etmek için benzer bir şekilde id alabilmeyi umarım ancak döngüler için iç içe geçmiş kullanıyorum ama çalışmıyor.

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" 
    } 


}); 

Onun benim etkinliklerin çıktı şuna benzer olduğu dikkati çekiyor: (

Events console output

ve benim görevlerini koymak farklı görünüyor Yoksun burada

Tek bir etkinlik için benim denetleyicisi olan çıkışta $ id alanı):

cevap

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

Benim tahminim event geçerli kapsamda değildir, ben her varyasyonu denedim event

+0

ile var anahtar kelime kullanma konusunda hiçbir hala düşünüyorum ama nasıl ... bunu erişmek mümkün değildir olabilir şans – sirJuice

İlgili konular