【问题标题】:Ember Data Not Using Irregular Model Name未使用不规则模型名称的 Ember 数据
【发布时间】:2015-09-28 17:52:37
【问题描述】:

在我的项目中,我为具有不规则名称的模型设置了变形器,campus 由于某种原因,从 Ember CLI 0.2.7 更新到 Ember CLI 1.13.8 后,变形器不再应用于模型。

尝试访问商店时,this.store.findRecord('campus', params['campus_id']),我收到警告

WARNING: Encountered "campus" in payload, but no model was found for model name "campu" (resolved model name using app@serializer:campus:.modelNameFromPayloadKey("campus"))

随后出现此错误

No model was found for 'campu' Error: No model was found for 'campu'

返回的负载看起来像这样

{
  campus: {
    id: 1,
    name: "Default Campus"
  },
  meta: {
    total: 1,
    page: 1
  }
}

而且我一直在使用初始化器并取得了成功

import Ember from 'ember';

export function initialize(/* registry, application */) {
  var inflector = Ember.Inflector.inflector;
  inflector.irregular('campus', 'campuses');
}

export default {
  name: 'inflections',
  initialize: initialize
};

我已尝试将 Ember Data 更新到最新版本 1.13.13,并将 ember 变形器更新到 1.9.3。我也尝试将不规则变形器移到模型中,但距离解决问题还很遥远

我还尝试在控制台中运行以下代码,然后再调用商店以查看变形器设置为什么

var inflector = Ember.Inflector.inflector;
inflector.singularize('campus') // returns "campus"
inflector.pluralize('campus') // returns "campuses"

这个问题非常令人沮丧,因为似乎没有办法解决它。

【问题讨论】:

  • 抱歉,忘记添加适配器类型。对于序列化程序,我使用来自github.com/ember-data/active-model-adapter 的 ActiveModelSerializer 但应用程序本身使用 RESTAdapter
  • inflector.irregular('campus', 'campuses'); 是错字吗?
  • @Artych,我不确定你所说的“错字”是什么意思。 Ember.Inflector.inflector.irregular('campus', 'campuses') 应该告诉 Ember,campus 是单数形式,而复数形式是 Campuses。这是预期的行为,也是更新之前发生的情况

标签: ember.js ember-data ember-cli


【解决方案1】:

嗯,我能够用 EmberData-2.0.1 重现这种令人困惑的行为,它看起来像是 ember-data 中的一个错误。

可能的解决方法:

//serializers/campus.js
import { ActiveModelSerializer } from 'active-model-adapter';

import Ember from "ember";
import DS from "ember-data";
const { normalizeModelName } = DS;
const { singularize } = Ember.String;

export default ActiveModelSerializer.extend({

  // this is dublication from source but singuralize works as expected
  modelNameFromPayloadKey: function(key) {
    return singularize(normalizeModelName(key));
  }

)};

Link to modelNameFromPayloadKey source code.

【讨论】:

    猜你喜欢
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    相关资源
    最近更新 更多