返回异步EmberJS路由的承诺字典
Returning dictionary of Promises for asynchronous EmberJS route
我正在学习如何将Ember承诺与异步路由一起使用,在这里有点磕磕磕绊。如果我这样写我的路由:
App.ActivitiesRoute = Ember.Route.extend({
model: function() {
return getClient().getActivities()
}
});
其中getActivities()
返回Ember.RSVP.Promise
类型,我可以在模板中使用:
{{#each activity in model}}
然而,我宁愿不让我的整个基本模型存在于单个属性中。当我尝试这个:
App.ActivitiesRoute = Ember.Route.extend({
model: function() {
return {
activities: getClient().getActivities()
}
}
});
然后把模板改成:
{{#each activity in model.activities}}
我收到一个错误信息:
"Uncaught Error: Assertion Failed: The value that #each loops over must be an Array. You passed {_id: 82, _label: undefined, _state: undefined, _result: undefined, _subscribers: }"
和我不知道如何返回一个命名的承诺集合,可以在我的模板中单独访问。
model
需要返回一个promise,以便基于promise的转换机制工作属性。你没有回报承诺;返回承诺的散列,这是完全不同的事情。您可以返回一个哈希值承诺,当它的所有单个键都满足Ember.RSVP.Promise.hash
时,该承诺实现:
model() {
return Ember.RSVP.Promise.hash({
activities: getClient().getActivities()
});
}
这个承诺将解析为一个看起来像{ activities: activities }
的哈希。记住,在其他条件相同的情况下这就是控制器的model
属性。因此,在控制器和模板中,您现在需要引用model.activities
。
如果您想等待几个异步调用(例如多个this.store
调用)在转换进行之前完成,您可以在模型钩子中使用相同的散列方法:
model() {
return Ember.RSVP.Promise.hash({
activities: getClient().getActivities(),
toys: this.store.findQuery('toy', type })
});
}
,然后将"main"设置为setupController
:
model
。setupController(controller, model) {
controller.set('model', model.activities);
}
在某些情况下,更简单的方法是在model
钩子中检索主模型,并使用afterModel
检索并等待辅助模型。
相关文章:
- javascript结合了数组和字典
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- python到“;流“;字典处理
- 我怎样才能获得承诺的价值
- 延期承诺值未更新/解析/延期
- 无法为打字稿字典赋值
- 在承诺链中处理早期回报的最佳方式
- 承诺在非节点式回调上使用Bluebird
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 带有对象/原型的链式承诺(Q延期)
- AngularJS$q承诺使用socket.io
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 当一些承诺失败时,如何继续使用$q.all()
- Nodejs和express路由,如何处理客户端的承诺
- 如何在多承诺链中处理谷歌地图API V3事件
- 承诺合并流
- 返回异步EmberJS路由的承诺字典