从链接到

时间:2017-09-29 21:28:03

标签: javascript ember.js metadata link-to serializer

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

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导航到该特定页面时,首先调用模型代码,因此没有元数据附加到模型。

当从normalizeResponse导航到model函数时,如何让link-to函数运行?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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。感谢该网站的答案。