我需要2个模型一起工作才能在网站上展示产品。 我有一个ProductController所以产品模型设置正确,因为我需要选项来显示产品,我需要在某处准备它(意味着在控制器运行之前解决承诺), 我认为setupController是正确的地方所以我设置了#39;选项'那里的财产,如下所示:
var Product = DS.Model.extend({
name: DS.attr('string'),
price: DS.attr('number'),
img: DS.attr('array')
});
var Option = DS.Model.extend({
productId: DS.attr('number'),
drawType: DS.attr('string'),
background: DS.attr('string'),
positionX: DS.attr('number'),
positionY: DS.attr('number')
});
App.ProductRoute = Ember.Route.extend({
setupController: function(controller, model) {
controller.set('model', model);
// i want to prepare option well so controller can get real data
// instead of a promise
this.store.find('option', 0).then(function(data){
controller.set('option', data);
});
})
})
App.ProductController = Ember.ObjectController.extend({
init: function(){
this._super();
console.log('can i get option in init?:', this.get('option'));
}
})
但它不能按我的预期工作,productController init中的输出是未定义的。任何人都可以帮忙,我哪里错了?感谢。
答案 0 :(得分:0)
一个想法是使用afterModel hook来获取您的选项对象并将其设置为路线上的属性。然后在setupController中,您也可以在控制器上设置该对象。
App.ProductRoute = Ember.Route.extend({
option: null,
afterModel: function() {
var _this = this;
return this.store.find('option', 0).then(function(data) {
_this.set('option', data);
});
},
setupController: function(controller, model) {
controller.set('model', model);
controller.set('option', this.get('option'));
}
});
但是,我不认为您可以在控制器的init()函数中访问选项对象(甚至是模型),因为在init()之后调用了setupController()。
附注 - 您可能希望将选项中的字段productId: DS.attr('number')
替换为product: DS.belongsTo('product')
。