我正在一个项目中工作,我有这些实体:区域,消息以及区域和消息之间的链接。在此链接中,我还可以配置一些额外的属性,例如,如果某个区域的消息可以多次显示,并且之前是否有要显示的先决条件消息。
我希望能够显示包含消息名称,show标志和先决条件消息名称的列表(如果已填写)。
我正在使用$ firebaseArray对象来执行我的常规列表,我已经看到了当你有这样的结构时如何进行查询的示例:
"region_messages":{
"xxxxxxx":true,
"yyyyyyy":true
}
在我的情况下,我怎么能做,我的结构更复杂。我正在尝试使用angularfire进行查询,我需要在Swift 3中进行相同的操作。
感谢您的帮助!
这是我的json树,以防您想要运行一些测试:
{
"messages" : {
"-KXSIeKHTM4lMRbeey2k" : {
"active" : true,
"name" : "link",
"type" : 3,
"url" : "http://www.google.com"
},
"-KXSIi_qw369nfU28lJJ" : {
"active" : true,
"name" : "video",
"type" : 4,
"url" : "http://www.youtube.com"
}
},
"region_messages" : {
"-KXfZYP8e--ZUgaVM9iL" : {
"-KXSIeKHTM4lMRbeey2k" : {
"pre_requisite_message_id" : "",
"show_only_once" : false
},
"-KXSIi_qw369nfU28lJJ" : {
"pre_requisite_message_id" : "-KXSIeKHTM4lMRbeey2k",
"show_only_once" : true
}
}
},
"regions" : {
"-KXfZYP8e--ZUgaVM9iL" : {
"major" : 1,
"name" : "Region 1"
}
}
}
答案 0 :(得分:1)
我按照this video中的说明操作,然后设法解决了问题。对我进行后续通话听起来很奇怪,但我猜它没有太多麻烦。功能:
$scope.getMessagesByRegion = function(regionId){
var rootRef = firebase.database().ref();
var regionMessagesRef = rootRef.child("region_messages/"+ regionId);
$scope.messages_by_region = []; // Here I reset the scope variable
regionMessagesRef.on('child_added', function(rmSnap) {
var messageRef = rootRef.child("messages/"+rmSnap.key);
messageRef.once('value').then(function(msgSnap){
var msg = {
key : msgSnap.key,
name : msgSnap.val().name,
type : $scope.getTypeName(msgSnap.val().type),
show_only_once : rmSnap.val().show_only_once,
pre_requisite_message : rmSnap.val().pre_requisite_message
}
$scope.$apply(function(){
$scope.messages_by_region.push(msg);
});
})
});
}
对于swift(iOS),我必须这样做。到目前为止表现似乎很好。