使用ember-cli时如何使用多字模型名称?

时间:2015-01-24 21:08:01

标签: ember.js ember-cli

我在使用多字模型名称和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) { ... })

当我使用phrase_token时,我的服务器返回的JSON使用根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:

我发布了issue关于此问题,ember-qunit的0.2.0版本解决了这个问题。

1 个答案:

答案 0 :(得分:1)

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