Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript findRecord给出错误“;无法读取属性'_内部模型&x27;“未定义”的定义;_Javascript_Ember.js_Ember Data_Ember Qunit - Fatal编程技术网

Javascript findRecord给出错误“;无法读取属性'_内部模型&x27;“未定义”的定义;

Javascript 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

在我们的余烬应用程序中,我们使用以下版本的余烬数据和余烬数据工厂

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 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的回复,我终于能够解决它了。我会将其添加为答案。回复:您的上述评论:参考此