ArrayProxy需要一个Array或Ember.ArrayProxy,但是你传递了对象

时间:2014-12-22 16:04:28

标签: ember.js ember-data active-model-serializers

我收到此错误:

ArrayProxy expects an Array or Ember.ArrayProxy, but you passed object

我使用active-model-serializers从rails应用程序获取数据。数据显示在mhy ember检查器中,但我的模板在控制台中无法正确显示此错误。

Router.map(function() {
  this.resource('brands', function() {
    this.resource('brand', { path: '/:brand_id' });
  });

  this.resource('campaigns', function() {
    this.resource('campaign', { path: '/:campaign_id' },
    this.resource('index'), { path: 'brands/:brand_id' });
  });
});

export default Ember.Route.extend({
  model: function() {
    return Ember.RSVP.hash({
      brand: this.store.find('brand'),
      campaign: this.store.find('campaign') 
    });
  }
});

export default DS.Model.extend({
  name: DS.attr('string'),
  facebook_page_id: DS.attr('string'),
  active: DS.attr('boolean'),
  facebook_uid: DS.attr('string'),
  facebook_token: DS.attr('string'),
  facebook_token_expires: DS.attr('string'),
  website_url: DS.attr('string'),
  privacy_policy_link: DS.attr('string'),
  terms_link: DS.attr('string'),
  instagram_account: DS.attr('string'),
  instagram_url: DS.attr('string'),
  twitter_account: DS.attr('string'),
  twitter_url: DS.attr('string'),
  avatar_url: DS.attr('string'),
  youtube_account: DS.attr('string'),
  youtube_url: DS.attr('string'),
  favicon_url: DS.attr('string'),
  open_graph_url: DS.attr('string'),
  campaigns: DS.hasMany('campaign', {async: true})
});

export default DS.Model.extend({
  name: DS.attr('string'),
  brand_id: DS.attr('string'),
  brand: DS.belongsTo('brand', {async: true})
});

{{#each brand in controller}}
  <a>
    {{#link-to 'brand' this}}
       {{brand.name}} 
     {{/link-to}}
   </a>
{{else}}
   <a>No brands found.</a>
{{/each}}

服务器日志中没有错误。

2 个答案:

答案 0 :(得分:0)

余烬默认索引控制器为ArrayControllers,期望其模型为数组。 在的模型钩子中 - 看起来似乎是你的BrandsIndexRoute你将模型指定为

Ember.RSVP.hash({
  brand: this.store.find('brand'),
  campaign: this.store.find('campaign') 
});

返回single object,而不是预期的array of brands 你应该做的是:

//brands route
export default Ember.Route.extend({
  model: function() {
    return this.store.find('brand');
  }
});

//campaigns route
export default Ember.Route.extend({
  model: function() {
    return this.store.find('campaign');
  }
});

答案 1 :(得分:0)

您正在尝试迭代控制器,但您的控制器正在装饰一个具有两个属性的对象,而不是一个数组。您的对象如下所示:

{
  brand: [...],
  campaign: [...]
}

此外,如果您将控制器定义为阵列控制器,则会抛出此错误(这正是我猜测的确实发生的事情)。因为您将对象传递给控制器​​而不是数组。