我有一种情况,我有一条路线延伸另一条路线但会向这条新路线添加更多数据。令我们变得棘手的是我们想要将新数据与现有的基本路线合并。
我可以使用
在模型钩子中同步执行此操作return Ember.merge(this._super(...arguments), {
foo : 123
});
但是如何异步检索数据并仍使用此Ember.merge
,例如
model(){
return Ember.merge(this._super(...arguments), {
foo : 123
baa: store.get('smthElse')
});
}
会给我一个模型,baa
作为一个承诺对象,而不是它的已解析值。
我尝试在Ember.merge
内部返回store.get('smthElse).then
,但this._super(...arguments)
提出了未定义的错误。
答案 0 :(得分:0)
model
挂钩返回一个promise,因此您必须等待它在合并之前使用值解析。
如果您要合并的对象也返回一个承诺,您也必须等待该承诺。
如果两个promises可以并行创建,那么这样的东西应该有效:
model(){
return Ember.RSVP.all([
this._super(...arguments), // call parent route's model hook
store.get('smthElse') // call whatever else you need
])
.then( // wait for all promises to resolve before merging
([parentModel, somethingElse]) => (
Ember.merge(parentModel, {
foo : 123,
baa: somethingElse
});
)
);
}
否则,如果请求store.get('smthElse')
取决于父路由的模型,则应该链接调用:
model(){
return this._super(...arguments) // call parent route's model hook
.then(
// request something else with the resolved parent model in scope
(parentModel) => store.get('smthElse', parentModel.get('whtvr')).then(
// resolve with both the parent model and something else
(somethingElse) => ({
parentModel,
somethingElse
})
)
)
.then(
({ parentModel, somethingElse }) => (
Ember.merge(parentModel, {
foo : 123,
baa: somethingElse
});
)
);
}