Ember.js 在模板中调用关系将返回DS.PromiseObject

Ember.js 在模板中调用关系将返回DS.PromiseObject,ember.js,firebase,ember-data,emberfire,Ember.js,Firebase,Ember Data,Emberfire,我将firebase与Ember CLI结合使用。我有以下设置: ember.debug.js:6401 DEBUG: Ember : 2.4.5 ember.debug.js:6401 DEBUG: Ember Data : 2.5.1 ember.debug.js:6401 DEBUG: Firebase : 2.4.2 ember.debug.js:6401 DEBUG: EmberFire : 1.6.6 ember.debug.js:6401 DEBUG: jQuery

我将firebase与Ember CLI结合使用。我有以下设置:

ember.debug.js:6401 DEBUG: Ember      : 2.4.5
ember.debug.js:6401 DEBUG: Ember Data : 2.5.1
ember.debug.js:6401 DEBUG: Firebase   : 2.4.2
ember.debug.js:6401 DEBUG: EmberFire  : 1.6.6
ember.debug.js:6401 DEBUG: jQuery     : 2.2.3
我有两个简单的模型

<!-- app/models/user.js -->
import Model from 'ember-data/model';

export default Model.extend({
  firstName: DS.attr('string'),
  lastName: DS.attr('string'),
  email: DS.attr('string'),
  profile: DS.belongsTo('profile', {async: true})
});

从“余烬数据/模型”导入模型;
导出默认模型.extend({
名字:DS.attr('string'),
lastName:DS.attr('string'),
电子邮件:DS.attr('string'),
profile:DS.belongsTo('profile',{async:true})
});
还有我个人资料的第二个模型

<!-- app/models/profile.js -->
import Model from 'ember-data/model';

export default Model.extend({
  companyName: DS.attr('string'),
  user: DS.belongsTo('user', {async: true})
});

从“余烬数据/模型”导入模型;
导出默认模型.extend({
公司名称:DS.attr('string'),
用户:DS.belongsTo('user',{async:true})
});
我有以下个人资料:

<!-- app/routes/profile.js -->
import Ember from 'ember';

export default Ember.Route.extend({
  model() {
    return this.store.query('user', { orderBy: 'email', equalTo: this.get('session.currentUser.email')}).then(function(user){
      console.log(user);
      return user;
    });
  }
});

从“余烬”导入余烬;
导出默认的Ember.Route.extend({
模型(){
返回this.store.query('user',{orderBy:'email',equalTo:this.get('session.currentUser.email')))。然后(函数(user){
console.log(用户);
返回用户;
});
}
});
我检查当前会话电子邮件地址是否与数据库中的电子邮件地址相等。并返回用户对象。这是有效的。(不知道这样做是否正确?)

在我的个人资料把手模板中,我有以下代码

<!-- app/templates/profile.hbs -->
{{#each model as |user|}}
  {{user.firstName}}
  {{user.lastName}}
  {{user.profile}}
{{/each}}

{{{#每个模型作为|用户}
{{user.firstName}
{{user.lastName}
{{user.profile}
{{/每个}}
这将在屏幕上返回以下内容:

frank spin <DS.PromiseObject:ember545>
frank spin

我的猜测是,关系数据尚未收到。我不知道如何解决这个问题。第二个问题:我检查当前登录用户的方法正确吗

您没有收到关系数据,这是正确的。但是,如果您这样编写模板,则在加载模板时仍应看到配置文件信息:

{{#each model as |user|}}
  {{user.firstName}}
  {{user.lastName}}
  {{user.profile.companyName}}
{{/each}}
模板中的承诺对象 promise对象(和promise数组)的目标是允许您在加载数据之前在Ember中绑定数据,并在promise解析后更新这些绑定。这对于次要的信息非常有用,在加载页面的其余部分后,可以安全地呈现这些信息

如果在承诺未解决的情况下,尝试呈现
配置文件
模型属性,则会得到一个空格:

(对于更简单的单一模型,您可以在
afterModel
hook中编写
returnmodel.get('profile')


afterModel
返回的任何承诺将阻止路由加载,直到解决为止。然后,在渲染时,模板将始终具有可用的用户配置文件。

我已经回答了有关配置文件关系渲染的问题。考虑一个单独的问题:这是否是用FialBASE加载当前用户的正确方法。我想不是,但这是一个完全不同的问题。
{{#each model as |user|}}
  {{user.firstName}}
  {{user.lastName}}

  {{#if user.profile.isPending}}
    <span class="spinner">…</span>
  {{else}}
    {{user.profile.companyName}}
  {{/if}}
{{/each}}
export default Ember.Route.extend({
  model() {
    return this.store.query('user', { orderBy: 'email',
      equalTo: this.get('session.currentUser.email')});
  },

  afterModel(users) {
    return Ember.RSVP.all(users.invoke('get', 'profile');
  }
});