(我的项目正在使用Emberfire,它是Firebase与Ember的集成。这允许我通过Firebase直接进行数据库调用,或者只使用Ember中的内置模型函数)< / em>的
我有两个型号。一个是/users
,包含有关用户的额外信息(特别是他们的schoolId
)。另一个模型是/schools
,每个ID下都包含schoolName
/等信息。我正在尝试根据其schoolId
信息附带的/users
显示用户学校的名称。
我目前的做法是使用名为school-name.js
的帮助程序,我只使用Firebase查询来返回值:
import Ember from 'ember';
export default Ember.Helper.extend({
firebaseApp: Ember.inject.service(),
compute(uid) {
//Firebase Database Ref
const database = this.get('firebaseApp').database();
//Find the current user's schoolId
database.ref('/users/' + uid).once('value').then(function(snapshot) {
var schoolId = snapshot.val().schoolId;
console.log("schoolId: " + schoolId);
//Find the current user's schoolName based on their schoolId
database.ref('/schools/' + schoolId).once('value').then(function(snapshot) {
var schoolName = snapshot.val().schoolName;
console.log(schoolName);
return schoolName;
});
});
}
});
这会使{。{1}}的console.log没有问题,但它不会在模板中显示。我的直觉告诉我,我必须对Ember和Firebase的承诺系统做一些事情,但我不知道从哪里开始,文档还没有很有帮助。
我之前的尝试是使用Firebase和Ember的模型系统。
schoolName
但是模板仍然不会加载信息。 我还通过仅使用Ember Store调用尝试了这一点,但是我不知道如何处理查询将返回数组而不是单个值。
感谢任何帮助!
答案 0 :(得分:1)
query
和firstObject
来检索第一个数据。在您的代码中,问题是在解析schoolId
之后考虑获取schollName。模型总是应该返回结果。model: function() { //Get current user's uid const uid = this.get('session.currentUser.uid'); //Inject Firebase Auth const auth = this.get('firebaseApp').auth(); var user = auth.currentUser; //Inject Firebase Database const database = this.get('firebaseApp').database(); return database.ref('/users/' + uid).once('value').then((snapshot) => { var schoolId = snapshot.val().schoolId; console.log(schoolId); return this.store.query('schools', { //Query specific school ID equalTo: schoolId }).then((result) => { return result.get('firstObject').get('schoolName'); }); }); }
答案 1 :(得分:0)
非常感谢伟大的人们帮助EmberJS Slack!多亏了他们,我把这一切都整理好了!
事实证明,我只需要了解承诺如何运作。
模板/ application.hbs
{{#each model as |school|}}
{{school.schoolName}}
{{/each}}
路由/ application.js中
model: function() {
const uid = this.get('session.currentUser.uid');
const store = this.store;
var userInfo = this.store.query('user', {
equalTo: uid
});
return userInfo.then(function(value) {
var userInfoObject = value.get('firstObject');
var schoolId = userInfoObject.get('schoolId');
return store.query('school', {
equalTo: schoolId
});
});
}
如果有人希望我就此提供意见/文件,请直接询问!