【问题标题】:How do I use a multi-word model name when using ember-cli?使用 ember-cli 时如何使用多字模型名称?
【发布时间】:2015-03-23 16:39:04
【问题描述】:

我在将多字模型名称与 ember-cli 结合使用时遇到问题。

我收到以下警告:

WARNING: Encountered "phrase_token" in payload, but no model was found
for model name "phraseToken" (resolved model name using
DS.ActiveModelSerializer.typeForRoot("phrase_token"))

我的查找方法如下:

store.find('phrase-token', 123).then(function(m) { ... })

我的服务器返回的 JSON 使用根 phrase_token,因为我使用的是 ActiveModelAdapter

我的一个理论是 Ember-data 正在尝试使用 camelCase 模型名称,但是使用 dasherized 名称的 ember-cli 解析器找不到。

我还尝试了以下方法:

store.find('phraseToken', 123).then(function(m) { ... })

但是说没有这样的模型是失败的。

更新:

我注意到这只发生在单元测试中。我意识到在我的问题中我没有提到我在测试时遇到了这个问题。在我的完整应用程序中,我实际上根本没有问题。

我声明我的测试模块如下:

moduleForModel 'phrase-token', 'PhraseToken', {
  # Specify the other units that are required for this test.
  needs: ['adapter:application', 'serializer:application']
}

我认为这归结为在我的完整应用程序(使用完全填充的容器等)中我可以执行以下操作:

!!store.modelFactoryFor('phrase-token')   # true
!!store.modelFactoryFor('phraseToken')    # true

但在我的单元测试中:

!!store.modelFactoryFor('phrase-token')   # true
!!store.modelFactoryFor('phraseToken')    # false

更新 2:

我发现在我的单元测试设置代码中执行以下操作可以解决问题:

container.normalizeFullName = function(fullName) {
  fullName.dasherize()
});

但感觉这不应该是必要的,所以我坚持要求不同的答案。

更新 3:

我为此发布了issueember-qunit 的 0.2.0 版本已解决此问题。

【问题讨论】:

  • 是的,命名约定需要在 ember 中匹配。认为您需要更改传入的有效负载以匹配名称,或者在它进入时在 ember 端进行更改。
  • 我认为活动模型适配器的重点是允许下划线名称服务器端。所以我认为我不需要改变我的有效载荷。
  • 嗯,也许吧。抱歉,我没有使用活动模型序列化程序,我的错。

标签: ember.js ember-cli


【解决方案1】:

当您在代码中引用模型时,您应该始终使用 dasherized 名称 - 就像您为文件命名一样,据我所知,其他所有内容均已弃用。不过,这不会影响您的 JSON 有效负载。

【讨论】:

  • 我总是使用破折号的名字。问题是 Ember 在内部将其转换为驼峰式名称,然后尝试使用该名称进行解析,这在正常操作中有效,但在测试时无效。
  • 您分享的代码显示了一些不同的东西。您正在尝试使用在测试中失败的骆驼大小写名称。我非常确定您可以在任何地方使用短语标记并且它会起作用 - 除了在 json 有效负载中您可能需要使用下划线版本。
  • 我向您展示了驼峰式命名的行为,以说明 Ember 的行为以及单元测试之间的差异以及加载完整应用程序的时间。我没有在我的应用程序中使用 camelCase。然而,正如我所说,Ember 仍在内部转换为 camelCase 并以这种方式在容器上执行查找,这恰好在加载完整应用程序时起作用,但在单元测试中不起作用。导致问题的查找深埋在 Ember Data 代码中,我的代码中没有模型名称的 camelCase 实例。
  • 啊。我假设这是特定于活动模型适配器的,并且是 ember 数据中的一个错误。只需继续使用破折号版本并期望问题自行解决。您使用的是哪个版本的 ember 数据?你试过金丝雀吗?
  • 是的,我认为它会得到解决。我发布了一个解决方法(更新 2),我现在将使用它。我正在使用 ember-data 1.0.0-beta.14.1 和 ember 1.9.1。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
相关资源
最近更新 更多