Ember.js 中的同步数据调用
Synchronous data calls in Ember.js
我在访问 reviews/show (/reviews/:id
) 时尝试执行以下操作:
- 从服务器加载两个模型:一个
review
和一个user
。
- 我只能访问
review
的id,所以我需要先加载它,才能得到userId
- 然后,当加载完成并且我现在有了
userId
时,使用 review
[=38= 中的 userId
属性查询 user
]
- 最后,return 这两个都在一个散列中,所以我可以在模板中同时使用它们
所以两个同步数据库查询,然后 return 它们同时在路由的 model
挂钩中。
我不介意它是否慢,它现在已经足够快了,我需要它来工作现在。
这是我试过的方法,但没有用:
reviews/show.js
export default Ember.Route.extend({
model: function(params) {
var user;
var review = this.store.findRecord('review', params.id).then(
function(result) {
user = this.store.findRecord('user', result.get('userId'));
}
);
return Ember.RSVP.hash({
review: review,
user: user
});
}
});
你可以这样做:
export default Ember.Route.extend({
model: function(params) {
var reviewPromise = this.store.findRecord('review', params.id);
return Ember.RSVP.hash({
review: reviewPromise,
user: reviewPromise.then(review => {
return this.store.findRecord('user', review.get('userId'));
})
});
}
});
用户是undefined
的原因是因为在审核解决之前它还没有在你的第一个承诺中分配,但是Ember.RSVP.hash已经收到user
作为[=11] =].
我在访问 reviews/show (/reviews/:id
) 时尝试执行以下操作:
- 从服务器加载两个模型:一个
review
和一个user
。 - 我只能访问
review
的id,所以我需要先加载它,才能得到userId
- 然后,当加载完成并且我现在有了
userId
时,使用review
[=38= 中的userId
属性查询user
] - 最后,return 这两个都在一个散列中,所以我可以在模板中同时使用它们
所以两个同步数据库查询,然后 return 它们同时在路由的 model
挂钩中。
我不介意它是否慢,它现在已经足够快了,我需要它来工作现在。
这是我试过的方法,但没有用:
reviews/show.js
export default Ember.Route.extend({
model: function(params) {
var user;
var review = this.store.findRecord('review', params.id).then(
function(result) {
user = this.store.findRecord('user', result.get('userId'));
}
);
return Ember.RSVP.hash({
review: review,
user: user
});
}
});
你可以这样做:
export default Ember.Route.extend({
model: function(params) {
var reviewPromise = this.store.findRecord('review', params.id);
return Ember.RSVP.hash({
review: reviewPromise,
user: reviewPromise.then(review => {
return this.store.findRecord('user', review.get('userId'));
})
});
}
});
用户是undefined
的原因是因为在审核解决之前它还没有在你的第一个承诺中分配,但是Ember.RSVP.hash已经收到user
作为[=11] =].