在EmberJS中加载路径的动态数据:(错误:对象没有方法addArrayObserver)

时间:2013-09-09 01:21:58

标签: ember.js ember-router

我正在努力解决这段代码真的很糟糕@那一刻。我有一个动态细分,我在路线中指定为:

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'错误。

我哪里出错或者我在这里失踪了什么?

2 个答案:

答案 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'
}]
};