Javascript findRecord给出错误“;无法读取属性'_内部模型&x27;“未定义”的定义;
在我们的余烬应用程序中,我们使用以下版本的余烬数据和余烬数据工厂 package.jsonJavascript findRecord给出错误“;无法读取属性'_内部模型&x27;“未定义”的定义;,javascript,ember.js,ember-data,ember-qunit,Javascript,Ember.js,Ember Data,Ember Qunit,在我们的余烬应用程序中,我们使用以下版本的余烬数据和余烬数据工厂 package.json "ember-cli": "^1.13.8", "ember-data": "1.13.9", "ember-data-factory-guy": "1.13.10", 注意:我们使用的是活动模型适配器,尚未迁移到json api适配器。 import ActiveModelAdapter from 'active-model-adapter'; export default ActiveModelAd
"ember-cli": "^1.13.8",
"ember-data": "1.13.9",
"ember-data-factory-guy": "1.13.10",
注意:我们使用的是活动模型适配器,尚未迁移到json api适配器。
import ActiveModelAdapter from 'active-model-adapter';
export default ActiveModelAdapter.extend({
路线:item.js
export default Ember.Route.extend(({
model(params) {
return this.store.findRecord('item', params.item_id);
}
});
其在开发模式下运行良好,但在运行测试用例时,我面临以下问题:
“显示单个项目”的测试用例失败,错误如下:
{
"message": "Cannot read property '_internalModel' of undefined",
"name": "TypeError"
}
ember data/lib/system/stpre/finder.js,在返回语句时失败
返回承诺。然后(函数(adapterPayload){
assert(“您请求了一个id为“+id+”的“+typeClass.typeClassKey+”,但适配器的响应没有任何数据”,adapterPayload)
()
我们遗漏了什么吗?有谁能帮我解决这个问题吗?我已经尝试将版本升级到最新版本,但仍然面临同样的问题
- 发布在余烬数据工厂的问题上
- 终于找到了确切的原因:
在我的适配器/application.js中
// Ember Data 2.0 Reload behavior
shouldReloadRecord: function() { return true; },
shouldReloadAll: function() { return true; },
shouldBackgroundReloadRecord: function() { return true; },
shouldBackgroundReloadAll: function() { return true; },
我在修复弃用警告时添加的这些行,正因为如此,导致记录总是被加载,尽管它们存在于ember数据存储中
这篇参考资料帮助我更好地理解了它:)我在这里发布这篇文章主要是为了提醒自己。我每隔几周就会遇到这个问题,来这里寻找答案:) 此错误是在我运行验收测试时引发的,因为我忘记告诉ember cli mirage生成假模型:
beforeEach(function() {
server.create('user', { id: window.sessionUser.id });
server.create('project', { userId: window.sessionUser.id });
});
在我的例子中,问题是服务器的响应没有根元素 服务器正在为用户返回:
{
surname: 'surname',
name: 'name',
_id: 56ead1ace85b04be4a7e50e6
}
相反:
user: {
surname: 'surname',
name: 'name',
_id: 56ead1ace85b04be4a7e50e6
}
如果使用
findRecord()
查询服务器,则Ember希望响应的格式为
{singularModelName: {...}}
{pluralModelName: [...]}
如果使用
query()
查询服务器,则Ember希望响应的格式为
{singularModelName: {...}}
{pluralModelName: [...]}
如果您在使用
findRecord()
时未遵循该响应模式,则会发生类型错误。您是否正在存根响应?this.store.findRecord('item',params.item_id)
向服务器发出请求。是的,它正在向服务器发送请求,但我的余烬数据存储中有可用的数据,所以我希望从那里获取这些数据。因此,不会中断该响应。this.store.findRecord
将始终发送请求,即使您的存储中有可用的请求。您应该尝试peekRecord代码>如果您不想发送请求。感谢@vikram7的回复,我终于能够解决它了。我会将其添加为答案。回复:您的上述评论:参考此