0

我正在为这段代码苦苦挣扎@那一刻。我有一个动态段,我在我的路线中指定为:

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 辅助标签加载,并在单击设置的 linkTo 时,它按预期呈现:

/set/1 或 /set/2

但它不加载任何数据。我希望它加载属于该集合的特定礼物数据,但它一直给我一个:

Object [object Object] has no method 'addArrayObserver' 错误。

我哪里错了或者我在这里错过了什么?

4

2 回答 2

1

当您有一个控制器子类化Ember.ArrayController您的 case 时,就会发生这种情况App.SetController,但控制器的 content 属性中的数据集是一个对象而不是数组。

我认为这this.get('store').find('gift',params.set_id);导致了这个问题。因为find返回第一个计算params.set_id.

Ember.ArrayController期望您的内容属性中有一个数组和Ember.ObjectController一个对象。在您的情况下,我建议使用Ember.ObjectController, 因为您正在处理一个对象。

我希望它有帮助

于 2013-09-09T01:34:49.153 回答
1

Set 是一个单例,与礼物是一对多的关系。

您的 SetController 必须是 ObjectController 类型,您的数据类似于:

App.Set.FIXTURES = {
id: 1,
name: 'some name',
gifts: [{
id: 1,
name: 'some name'
},{
id: 2,
name: 'some name'
}]
};
于 2013-09-10T01:38:14.493 回答