我采用了angularjs + firebase示例并将其修改为一个应用程序,我可以为一个小型越野比赛注册一些孩子。
我可以使用基本结构注册孩子(参与者),比赛,地点,俱乐部等:
FIREBASE_URL/races
FIREBASE_URL/clubs
等等。选择活动竞赛后,我保存raceId
并竞赛json-object
,并可以将参与者添加到活动竞赛中。
示例:
FIREBASE_URL/active_race/-JI6H9VQewd444na_CQY
FIREBASE_URL/active_race/json-object
我想做的是根据raceId
获取所有参与者(如果有的话):
FIREBASE_URL/races/-JI6H9VQewd444na_CQY/participants
我尝试了以下
'use strict';
app.factory('Race', function ($firebase, FIREBASE_URL, User) {
var ref = new Firebase(FIREBASE_URL + 'races');
var races = $firebase(ref);
var Race = {
all: races,
getParticipantsInRace: function () {
var fb = new Firebase(FIREBASE_URL);
fb.child('active_race/raceId').once('value', function (activeSnap) {
races.$child('/' + activeSnap.val() + '/participants');
});
}
};
return Race;
但我相信我做错了。我试图在return
和races.$child
之前添加fb.child
,但这并没有解决我的问题。
我尝试对以下json-array
进行硬编码,这将显示在网页上:
return [{name: 'Claus', born: '1967'}, {name: 'John', born: '1968'}];
如何让所有参与者进入$scope.participantsInRace
?
我相信我有一个解决方案,但我不确定这样做是否明智。但它可能就这么简单。预先$rootScope.participantsInRace =
将它放入rootScope:
$rootScope.participantsInRace = races.$child('/' + activeSnap.val() + '/participants');
答案 0 :(得分:0)
代码在声明$firebase(URL+'races');
时已经在同步所有种族中的所有数据。此外,您从未将races.$child(...)
分配给任何内容,因此以后无法引用该数据。
app.factory('Race', function ($firebase, FIREBASE_URL, User) {
var ref = new Firebase(FIREBASE_URL + 'races');
var races = $firebase(ref);
var Race = {
all: races,
getParticipantsInRace: function (raceId) {
return races[raceId]? races[raceId].participants || {};
}
};
return Race;
});
请记住,在调用races.$on('loaded')
之前(当数据从服务器返回时),竞赛数据将无法使用。
答案 1 :(得分:0)
感谢您的输入。我现在对angularjs和javascript了解得更多,所以我做了一些重构和清理工作。 Hardcoding raceId有效:
getParticipantsInRace: function () {
return races.$child('-JIecmbdDa4kUT2L51iS').$child('participants');
}
当我将它包装在对Firebase的调用中时,我似乎无法返回所需的数据,这可能是由于我对如何返回数据的javascript知识有限。例如:
getParticipantsInRace: function () {
ref.child('activeRace').child('raceId').once('value', function (activeSnap) {
return races.$child(activeSnap.val()).$child('participants');
});
}
我的想法是获得raceId然后返回所有参与者。我试图在返回ref.child()前添加,但仍然没有返回数据。所以不是一个真正的答案。
此致 克劳斯
答案 2 :(得分:0)
这很有效。我将$rootScope.participantsInRace
更改为$scope.participantsInRace
以及以下内容:
getParticipantsInRace: function () {
if (User.signedIn()) {
var t = [];
var user = User.getCurrent();
var fb = new Firebase(FIREBASE_URL + 'users');
fb.child(user.username).child('activeRace/raceId').once('value', function (userSnap) {
t = races.$child(userSnap.val()).$child('participants');
});
return t;
}
},