Javascript Ember.js中的同步数据调用
我在访问评论/节目时尝试执行以下操作(Javascript Ember.js中的同步数据调用,javascript,ember.js,synchronization,ember-data,Javascript,Ember.js,Synchronization,Ember Data,我在访问评论/节目时尝试执行以下操作(/reviews/:id): 从服务器加载两个模型:一个review和一个user 我只能访问review的id,因此我需要首先加载它,以获取用户id 然后,当加载完成并且我现在有了userId时,使用review中的userId属性查询user 最后,在散列中返回这两个,以便我可以在模板中使用它们 因此需要两个同步数据库查询,然后在路由的模型钩子中同时返回它们 我不介意它是否慢,它现在足够快,我需要它现在工作 这是我尝试过的,但不起作用: 评论/sho
/reviews/:id
):
- 从服务器加载两个模型:一个
和一个review
user
- 我只能访问
的id,因此我需要首先加载它,以获取review
用户id
- 然后,当加载完成并且我现在有了
时,使用userId
中的review
属性查询userId
user
- 最后,在散列中返回这两个,以便我可以在模板中使用它们
模型钩子中同时返回它们
我不介意它是否慢,它现在足够快,我需要它现在工作
这是我尝试过的,但不起作用:
评论/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'));
})
});
}
});
用户未定义
的原因是,在审核解决之前,您的第一个承诺中没有分配该用户,但Ember.RSVP.hash已将用户
作为未定义
收到。谢谢你的回答。当您完全按照发布的方式运行代码时,会出现错误无法读取未定义的属性“store”。。因为此
的上下文在承诺内发生了变化。可以通过将此保存到model()
范围内的变量来修复此问题。但你的想法完全正确。我编辑了答案,这样它就有了工作代码(PS,我只编辑了你关于友善的评论,所以我的编辑中至少有10个字符,对不起,哈哈)@Marcprins当你使用箭头功能时,上下文不会改变。确保您没有键入有趣的函数。。这是ES6吗?@Marcprins是的,看看这些,当你使用ember Clip时,所有这些都是有效的。顺便说一句,你在做链式数据调用。同步ajax调用阻止javascript执行任何操作。