【问题标题】:ember normalizeResponse when navigated to page from link-to从链接到导航到页面时的 ember normalizeResponse
【发布时间】:2017-09-29 21:28:02
【问题描述】:

当我导航到特定页面时,我的序列化程序中的重写函数 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 导航到该特定页面时,首先调用模型代码,因此没有将元数据附加到模型。

link-to 导航到时,如何让normalizeResponse 函数在model 函数之前运行?

任何帮助将不胜感激。

【问题讨论】:

  • 显然,这似乎是一个已经存在多年的问题。是否只是做一个 ajax 调用并推送到商店?

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


【解决方案1】:

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

所以我原来帖子中的第二个代码 sn-p 应该如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 2015-08-21
    • 1970-01-01
    相关资源
    最近更新 更多