如何使用随机子ID的FirebaseIndex

时间:2013-10-23 10:38:46

标签: firebase angularfire

我有这个节点,ref孩子有randomID。

master: {
 123: {
  text: "hello world"
 },

 456: {
  text: "hello world 2"
 }
}

ref: {
 abc: {
  123: 1,
  456: 1
 },

 efg: {
  456: 1
 }
}

我想循环refrefToMaster。如何使用FirebaseIndex进行查询?

new FirebaseIndex(ref.child(STUCK_HERE), master);

更新

我将节点结构更新为hiattp和kato所提到的内容。

抱歉我的问题不明确,我重新编辑了这个问题。实际上,我想同时检索ref.abcref.efg,并检索123456

的相关主数据

以下是我的尝试。

angularFireCollection(ref, function(s) {
 s.forEach(function(cs){
  //cs.name() - So I can get abc and efg and put in FirebaseIndex
  var index = new FirebaseIndex(ref.child(cs.name()), master);
  $scope.foos = angularFireCollection(index);
  //I stuck here, must be something wrong.
 })
})

2 个答案:

答案 0 :(得分:1)

在您的示例中,abcefg应该是键列表(需要作为FirebaseIndex中的第一个参数)。因此,格式应为refToMaster: "key"而不是"key":1,而1只是占位符。像这样:

ref: {
  abc: {
   "123":1,
   "456":1
  },
  efg: {
   "456":1
  }
}

现在new FirebaseIndex(ref.child('abc'), master)会在123中为您提供456master个对象,而new FirebaseIndex(ref.child('efg'), master)只会为您提供456对象

答案 1 :(得分:0)

@hiattp已经注意到FirebaseIndex的标准格式。这是预期的用例。

您还可以将函数传递给FirebaseIndex的dataRef,这样您就可以处理更复杂的路径:

new FirebaseIndex( 
   new Firebase('URL/index'), 
   function(pathName) {
      return new Firebase('URL/data/'+pathName+'/widget');
   }
);

但是,由于您的数据结构存在问题,因此密钥abcefg完全是任意的 - 不会以任何方式与您的master数据相关联,因此我不会看看你的函数可以做什么,除了包含从主键到ref路径的完整映射。