2017-09-29 105 views
0

当我导航到特定页面时,我的序列化程序中的重写函数normalizeResponse与我的路由器model函数中的代码结合使用,将元数据添加到我的模型中,工作正常。基本上,normalizeResponse先运行,然后我的model功能在我的路由器中运行。ember normalizeResponse从链接导航到页面时

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

而且在我的模型。

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

任何人看到这个问题的答案是将{reload: true}作为参数添加到findRecord函数中。

所以从我原来的职位的第二代码片段将不会像以下:

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。感谢那个网站的答案。

相关问题