2017-09-29 66 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。感謝那個網站的答案。

相關問題