findRecord给出错误"无法读取未定义的属性'_internalModel'"

Swa*_*ati 7 javascript ember.js ember-data ember-qunit

在我们的ember应用程序中,我们使用以下版本的ember-data和ember-data-factory-guy.

的package.json

"ember-cli": "^1.13.8",
"ember-data": "1.13.9",
"ember-data-factory-guy": "1.13.10",
Run Code Online (Sandbox Code Playgroud)

注意:我们使用的是活动模型适配器,尚未迁移到json-api适配器.

import ActiveModelAdapter from 'active-model-adapter';
export default ActiveModelAdapter.extend({
Run Code Online (Sandbox Code Playgroud)

路线:item.js

export default Ember.Route.extend(({
  model(params) {
    return this.store.findRecord('item', params.item_id);
  }
});
Run Code Online (Sandbox Code Playgroud)

在开发模式下工作正常,但在运行测试用例时,我面临以下问题:

"显示单项"的测试用例失败,出现以下错误:

{
  "message": "Cannot read property '_internalModel' of undefined",
  "name": "TypeError"
}
Run Code Online (Sandbox Code Playgroud)

ember-data/lib/system/stpre/finder.js,在return语句中失败

return promise.then(function(adapterPayload){Ember.assert("你发出了一个带有"+ id +"的"+ typeClass.typeClassKey +"的请求,但是适配器的响应没有任何数据",adapterPayload);

return store._adapterRun(function () {
  var requestType = get(serializer, 'isNewSerializerAPI') ? 'findRecord' : 'find';
  var payload = normalizeResponseHelper(serializer, store, typeClass, adapterPayload, id, requestType);
  //TODO Optimize
  var record = pushPayload(store, payload);
  return record._internalModel;
});
Run Code Online (Sandbox Code Playgroud)

(https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/store/finders.js#L32)

我们在这里遗失了什么?有人可以帮我解决这个问题吗?我已尝试将版本升级到最新版本,但仍面临同样的问题.

Swa*_*ati 0

终于找到了具体原因:

在我的适配器/application.js 中

// Ember Data 2.0 Reload behavior
shouldReloadRecord: function() { return true; },
shouldReloadAll: function() { return true; },
shouldBackgroundReloadRecord: function() { return true; },
shouldBackgroundReloadAll: function() { return true; },
Run Code Online (Sandbox Code Playgroud)

这些行是我在修复弃用警告时添加的,因此,它导致记录始终加载,尽管它们存在于 ember-data 存储中。所以现在我就把它们删除了。

http://emberjs.com/blog/2015/06/18/ember-data-1-13-released.html#toc_new-adapter-hooks-for-better-caching此参考帮助我更好地理解它: )