我在使用多字模型名称和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版本解决了这个问题。
答案 0 :(得分:1)
当您在代码中引用模型时,您应该始终使用dasherized名称 - 就像您为文件命名一样,根据我的知识,其他所有内容都已弃用。但这并不会影响您的JSON有效负载。