我正在努力解决这段代码真的很糟糕@那一刻。我有一个动态细分,我在路线中指定为:
App.Router.map(function(){
this.resource('set', {path:'/set/:set_id'});
});
因此,
App.SetRoute = Ember.Route.extend({
model: function(params){
return this.get('store').find('gift',params.set_id); // each set has a bunch of gifts that belong to it and are identified by set_id which acts as the primary key .
}
});
App.SetController = Ember.ArrayController.extend(); // array controller since I expect an array of gifts to be returned when visiting this route
当执行此操作时,我会收到一个明显的错误:
Object [Object Object]没有方法addArrayObserver
我的数据正在通过夹具加载,如下所示:
App.Set.FIXTURES = [
{
id: 1,
name: 'EmberJS'
},
{
id:2,
name: 'Routing'
},
... ]
App.Gift.FIXTURES = [ { id:1, gift_name:'随机名', set_id:1 },
{
id: 2,
gift_name: 'name 2',
set_id: 1
},
..]
礼品模型扩展为:
App.Card = DS.Model.extend({
gift_name: DS.attr('string'),
set_id : DS.belongsTo('App.Set')
});
路线由车把内的#linkTo帮助器标签加载,点击设置的链接后,它按预期呈现,如:
/ set / 1或/ set / 2
但它不会加载任何数据。我希望它加载属于该集合的特定礼物数据,但它一直给我一个:
Object [object Object]没有方法'addArrayObserver'错误。
我哪里出错或者我在这里失踪了什么?
答案 0 :(得分:1)
如果您的控制器在您的案例Ember.ArrayController
中继承App.SetController
,但控制器的content属性中的数据集是对象而不是数组,则会发生这种情况。
我认为this.get('store').find('gift',params.set_id);
导致了这个问题。因为find
会返回匹配params.set_id
的值的第一个对象。
Ember.ArrayController
期望您的内容属性中有一个数组,Ember.ObjectController
是一个对象。在您的情况下,我建议使用Ember.ObjectController
,因为您正在处理一个对象。
我希望它有所帮助
答案 1 :(得分:1)
Set是一个单身人士,与礼物有一对多的关系。
您的SetController必须是ObjectController类型,您的数据类似于:
App.Set.FIXTURES = {
id: 1,
name: 'some name',
gifts: [{
id: 1,
name: 'some name'
},{
id: 2,
name: 'some name'
}]
};