2016-04-04 6 views
0

私は、firefbaseを使ってネストされた配列のオブジェクトをangelfireで取得することに苦労しています。javascriptは入れ子の子配列でオブジェクトを取得します

構造は次のようになります。

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

} 

私は、ユーザーに基づいfirebaseからアイテムをフェッチサービスを持っている:

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


    }; 
}); 

は今、私のサービスに私がイベントを取得するだけでなく、することができています単一のイベント。私は単一の仕事を得ることができないようです。タスクを一覧表示するだけです。 in getInnerTaskイベントIDを取得するのと同様の方法でIDを取得できますが、動作していないことを期待して、入れ子のループを使用しています。

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


}); 

その私のイベント出力はこのようになっていることは注目に値する::(

Events console output

と私のタスクアウトプットが違って見えるが欠けている、ここで

は、単一のイベントのための私のコントローラであり、出力の$ idフィールド):

Tasks console output

答えて

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

私の推測では、event

+0

varキーワードを使用することについて、私はノーまだ私が思いつく限りのバリエーションを試みたが、しているか...、現在のスコープでeventではありません、あなたがそれにアクセスすることができませんかもしれ運 – sirJuice

関連する問題