2017-09-29 9 views
0

특정 페이지로 이동하면 라우터에서 코드와 함께 사용되는 serializer의 normalizeResponse 함수가 내 모델에 메타 데이터를 추가하기 위해 함수 model이 제대로 작동합니다. 기본적으로 normalizeResponse이 먼저 실행되고 라우터에 내 model이 작동합니다.엠버 normalizeResponse 페이지로 이동했을 때 링크 대상에서

import App from '../app'; 
import JSONAPISerializer from 'ember-data/serializers/json-api'; 

App.storeMeta = {}; 

export default JSONAPISerializer.extend({ 
    normalizeResponse(store, primaryModelClass, payload){ 
    App.storeMeta[primaryModelClass.modelName] = payload.meta; 
    return this._super(...arguments); 
    } 
}); 

그리고 내 모델

serializers/application.js

. 어떤 메타 데이터 모델에 장착되고 있지 그래서 거기에
import App from '../app' 
... 
model(params){ 
    const data = {}; 

    return this.store.findRecord('myModelType', params.id).then((myModelType)=>{ 
    myModelType.meta = App.storeMeta['myModelType']; 
    return myModelType; 
    },()=>{ //error 
    this.get('session').invalidate(); 
    }); 
} 

나는 다른 페이지에서 link-to을 통해 특정 페이지로 이동

는 모델 코드가 먼저 호출됩니다.

link-to에서 내비게이션 할 때 model 함수 전에 normalizeResponse 함수를 실행하려면 어떻게해야합니까?

도움이된다면 크게 도움이 될 것입니다.

+0

분명히 이것은 수년간 계속되어 온 문제인 것 같습니다. 해결 방법은 그냥 아약스 호출을하고 상점에 밀어 넣는 것입니까? – user2517182

답변

0

이 질문에 대한 답변은 findRecord 함수에 {reload: true}을 매개 변수로 추가하는 것입니다.

그래서 내 원래의 게시물에서 두 번째 코드는 다음과 같이하지 않을 :

import App from '../app' 
... 
model(params){ 
    const data = {}; 

    return this.store.findRecord('myModelType', params.id. {reload: true}).then((myModelType)=>{ 
    myModelType.meta = App.storeMeta['myModelType']; 
    return myModelType; 
    },()=>{ //error 
    this.get('session').invalidate(); 
    }); 
} 

더 많은 정보 here합니다. 답변을 얻은 사이트에 감사드립니다.