繁体   English   中英

灰烬-findAll和Promise

[英]Ember - findAll and promises

我在组件中使用findAll有一个小问题。 它涉及到最后返回的值。

users: Ember.computed(function() {
return this.get('store').findAll('user');
}),

就我而言,我想获取第一个对象的名称。 所以在我的车把里:

users.firstObject.name

在这种情况下,“用户”是一个类。 但是我试图直接返回属性中的第一个对象,如下所示:

user: Ember.computed(function() {
    return this.get('store').findAll('user')
    .then(function(user){
      return user.get('firstObject');
    });
  }),

但是在这种情况下,在我的车把中,user.name是未定义的,而user是一个承诺。 诺言有一些我无法理解的东西,它们是如何工作的……有人可以帮助我在不对用户使用“ firstObject”的情况下获得正确的用户吗? 提前致谢 !

解决问题的最快捷方法是安装ember-promise-helpers插件并将其应用到模板中,如下所示:

{{#if (await user)}}
  {{get (await user) 'name'}}
{{/if}}

但是,尽管仍然可以执行AFAIK,但不建议将promise用作计算属性的值。 在这里,我将推荐Ember.PromiseProxyMixin文档 ,以及阅读一些(尽管是较旧的)论坛主题(例如, 主题)。

我认为您遇到的问题不在于承诺,而是您如何使用计算属性。

findRecord / findAll的最佳位置是路径中的模型挂钩。 最好不要依赖firstObject来描述。 您无法保证在应用程序的后端数据更改时,哪个记录优先。

计算属性的真正目的是观看其他数据并更新有关该数据的显示信息,而不是自己从商店中获取东西。 他们需要的参数是应该监视更新的数据的名称。 由于您的计算属性没有监视任何内容,因此它永远不会触发。 这是一个例子。

  firstName: null,
  lastName: null,

  fullName: Ember.computed('firstName', 'lastName', function() {
    let firstName = this.get('firstName');
    let lastName = this.get('lastName');

    return `${firstName} ${lastName}`;
  })

您可以在指南中的计算属性下阅读更多内容。

如果在路由中定义一个模型挂钩,以便使用findRecord获取用户信息,然后将其传递给子组件,或者在不同路线上的许多不同组件需要用户信息的情况下,将其设置在服务上,那么您的时间将会轻松得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM