Ember - findAll 和 promises
Ember - findAll and promises
我在组件中使用 findAll 时遇到一点问题。它关系到最后 returns 的值。
users: Ember.computed(function() {
return this.get('store').findAll('user');
}),
在我的例子中,我想获取第一个对象的名称。所以在我的把手中:
users.firstObject.name
'users' 在这种情况下是 class。但是我正在尝试 return 直接 属性 中的第一个对象,像这样:
user: Ember.computed(function() {
return this.get('store').findAll('user')
.then(function(user){
return user.get('firstObject');
});
}),
但在这种情况下,在我的把手中,user.name 是未定义的,用户是一个承诺。有一些我无法理解的承诺,它们是如何工作的......
有人可以帮助我在不对我的用户使用 'firstObject' 的情况下获得正确的用户吗?
提前致谢 !
解决您问题的最快捷方式是安装一个 ember-promise-helpers 插件并将其应用到您的模板中,如下所示:
{{#if (await user)}}
{{get (await user) 'name'}}
{{/if}}
但是,据我所知,不建议使用 promises 作为计算属性的值,尽管您仍然可以这样做。在这里我会推荐 documentation for Ember.PromiseProxyMixin
as well as reading some (although older) forum threads (for instance this one).
我认为您遇到的问题不在于承诺,而是您如何使用计算 属性。
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 获取用户信息的路由中定义一个模型挂钩,然后将其传递给子组件或将其设置在服务上(如果不同路由上的许多不同组件需要用户信息。
我在组件中使用 findAll 时遇到一点问题。它关系到最后 returns 的值。
users: Ember.computed(function() {
return this.get('store').findAll('user');
}),
在我的例子中,我想获取第一个对象的名称。所以在我的把手中:
users.firstObject.name
'users' 在这种情况下是 class。但是我正在尝试 return 直接 属性 中的第一个对象,像这样:
user: Ember.computed(function() {
return this.get('store').findAll('user')
.then(function(user){
return user.get('firstObject');
});
}),
但在这种情况下,在我的把手中,user.name 是未定义的,用户是一个承诺。有一些我无法理解的承诺,它们是如何工作的...... 有人可以帮助我在不对我的用户使用 'firstObject' 的情况下获得正确的用户吗? 提前致谢 !
解决您问题的最快捷方式是安装一个 ember-promise-helpers 插件并将其应用到您的模板中,如下所示:
{{#if (await user)}}
{{get (await user) 'name'}}
{{/if}}
但是,据我所知,不建议使用 promises 作为计算属性的值,尽管您仍然可以这样做。在这里我会推荐 documentation for Ember.PromiseProxyMixin
as well as reading some (although older) forum threads (for instance this one).
我认为您遇到的问题不在于承诺,而是您如何使用计算 属性。
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 获取用户信息的路由中定义一个模型挂钩,然后将其传递给子组件或将其设置在服务上(如果不同路由上的许多不同组件需要用户信息。