我有2个型号:
App.Center = DS.Model.extend({
name: DS.attr('string'),
code: DS.attr('string'),
studies: DS.hasMany('study', {async: true})
});
App.Study = DS.Model.extend({
center: DS.belongsTo('center'),
//other data
});
理论上,Ember将等待研究承诺得到解决,然后渲染模板以显示它们。对于常见情况,这非常好。
我必须对CenterStudiesController
内的中心研究实施一些过滤和其他操作。
问题是center.get('studies')
是控制器内的空数组。我怎么能等他们被装上?
我不想修改服务器代码以便加载研究。
有办法做到这一点吗?
答案 0 :(得分:1)
Promise可以在路由中解析(在model,beforeModel或afterModel钩子中)。如果模型钩子(或相关的beforeModel或afterModel钩子)返回一个promise(或者如果一个promise作为transitionTo的参数提供),过渡将暂停,直到该承诺履行或拒绝。
传递给每个路由的setupController挂钩的值将是promises中已实现的值。 http://guides.emberjs.com/v1.12.0/routing/asynchronous-routing/#toc_the-router-pauses-for-promises
您可以在路线中解析center.studies
作为模型。在CenterStudies中,控制器model
将被解析为studies
的数组。
//center studies route
model: function() {
var center = this.modelFor('center'); // or something else it depends on your logic
return center.get('studies');
}
// center studies controller
filteredStudies: Ember.computed('model.[]', function() {
// your filtering here
})
// center studies template
{{#each filteredStudies as |study|}}
{{study.data}}
{{/each}}