2017-09-29 9 views
0

Lorsque je navigue sur une page spécifique, la fonction surchargée normalizeResponse dans mon sérialiseur utilisé conjointement avec le code dans ma fonction routeur model, d'ajouter des métadonnées à mon modèle, fonctionne correctement. Fondamentalement, normalizeResponse fonctionne d'abord, puis ma fonction model dans mon routeur.Ember normalizeResponse lorsque naviguer à la page de lien à

serializers/application.js

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); 
    } 
}); 

Et dans mon modèle.

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(); 
    }); 
} 

Lorsque je navigue sur cette page spécifique par un link-to d'une autre page, le code du modèle est appelé en premier lieu, donc il n'y a pas de données méta étant attachées au modèle.

Comment faire pour que la fonction normalizeResponse s'exécute avant la fonction model lors de la navigation à partir de link-to?

Toute aide serait grandement appréciée.

+0

Apparemment, cela semble être un problème qui dure depuis des années. Le travail consiste-t-il simplement à faire un appel ajax et à pousser au magasin? – user2517182

Répondre

0

La réponse pour quiconque voit ceci est d'ajouter {reload: true} comme un paramètre à la fonction findRecord.

Ainsi, le deuxième extrait de code de mon message original ne serait pas ressembler à ce qui suit:

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(); 
    }); 
} 

Plus d'info here. Merci à ce site pour la réponse.