我收到此错误:
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}}
服务器日志中没有错误。
答案 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: [...]
}
此外,如果您将控制器定义为阵列控制器,则会抛出此错误(这正是我猜测的确实发生的事情)。因为您将对象传递给控制器而不是数组。