我在组件中使用findAll有点问题。它涉及到它最终返回的价值。
users: Ember.computed(function() {
return this.get('store').findAll('user');
}),
在我的情况下,我想获得第一个对象的名称。所以在我的车把里:
users.firstObject.name
在这种情况下,'p''用户'是一个类。但我试图直接返回属性中的第一个对象,如下所示:
user: Ember.computed(function() {
return this.get('store').findAll('user')
.then(function(user){
return user.get('firstObject');
});
}),
但在这种情况下,在我的手柄中,user.name是未定义的,user是一个promise。有些东西我无法理解承诺,它们如何运作...... 有人可以帮助我在不使用'firstObject'的情况下获得正确的用户吗? 提前致谢 !
答案 0 :(得分:0)
解决问题的最简单方法是安装ember-promise-helpers插件并将其应用到模板中,如下所示:
The branch to deploy, gh_pages, does not exist.
但是,AFAIK,不建议使用promises作为计算属性的值,尽管您仍然可以这样做。在这里,我建议{{#if (await user)}}
{{get (await user) 'name'}}
{{/if}}
Ember.PromiseProxyMixin
以及阅读一些(尽管较旧的)论坛帖子(例如documentation)。
答案 1 :(得分:0)
我认为您遇到的问题不在于承诺,而在于您如何使用计算属性。
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}`;
})
您可以在指南中的Computed Properties下阅读更多内容。
如果您在使用findRecord获取用户信息的路线中定义模型挂钩,然后将其传递给子组件,或者如果不同路径上的许多不同组件将其设置在服务上,您将会更容易需要用户信息。