2014-12-22 3 views
0

나는이 오류가 무엇입니까 통과 : 나는 액티브 모델 시리얼 라이저를 사용하여 레일 응용 프로그램에서 내 데이터를 얻고모두 ArrayProxy는 배열 또는 Ember.ArrayProxy를 기대하고 있지만, 개체

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

합니다. 데이터가 주요 인스펙터에 표시되지만 콘솔의이 오류로 인해 템플릿이 제대로 렌더링되지 않습니다.

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

Embers 기본 인덱스 컨트롤러는 해당 모델이 배열이 될 것으로 예상하는 ArrayControllers입니다. 로 보이는 - - 의 모델 후크에서 는 당신의 BrandsIndexRoute 당신이 예상되는으로 single object 아닌 array of brands를 반환

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

같은 모델을 지정했습니다.
은 당신이 대신해야 할 것은 같은 것입니다 :

//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'); 
    } 
}); 
+0

특정 컨트롤러 유형에 대한 경로가 기본적으로 지정되지 않은 경우 컨트롤러 유형을 지정하지 않으면 컨트롤러 유형이 모델 후크에서 반환 된 데이터 유형에 따라 결정됩니다. https://github.com/emberjs/ember.js/blob/876eecf6ab29159b1ef5474f2c62da139bb636c0/packages/ember-routing/lib/system/generate_controller.js#L26 – Kingpin2k

+0

이것은 원래 내가 한 일로, 동일한 템플릿. 우리의 도움에 감사드립니다. – garthonrails

0

당신은 컨트롤러를 반복하려는, 그러나 당신의 컨트롤러는 두 개의 속성이 아닌 배열로 객체를 장식한다. 당신의 목적은 다음과 같습니다

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

을 또한 당신이 (정말 무슨 일이 일어나고 있는지 내가 추측하고있어입니다)이 오류가 발생합니다 배열 컨트롤러로 정의 된 컨트롤러가있는 경우. 배열 대신 컨트롤러에 객체를 전달하기 때문입니다.

+0

객체 컨트롤러를 사용할 때 오류가 발생하고 ArrayControllerler를 기다리고 있습니까? – garthonrails

+0

각 컨트롤러가 배열을 기다리고 있다고 하시겠습니까? – Kingpin2k