EmberJS嵌套路线模型

时间:2015-07-06 15:02:36

标签: ember.js ember-data

我正在使用EmberJS 1.13.3,EmberData 1.13.4,活动模型适配器1.13.3,我正在尝试从商店加载一些模型数据。父路由调用API并按预期工作,但子路由调用API但返回时出现以下错误:

Cannot read property '_internalModel' of undefined TypeError: Cannot read property '_internalModel' of undefined

我的代码如下所示:

档案:routes/user.js

import Ember from 'ember';

export default Ember.Route.extend({
  titleToken: function() {
    return 'Profile';
  },

  model: function(params) {
    return Ember.RSVP.hash({
      user: this.store.findRecord('user', params.username)
    });
  },

  setupController: function(controller, models) {
    this._super(controller, models);
    controller.setProperties(models);
  }
});

档案:routes/user/posts.js

import Ember from 'ember';

export default Ember.Route.extend({
  titleToken: function() {
    return 'Posts';
  },

  model: function() {
    return Ember.RSVP.hash({
      posts: this.store.findRecord('post', 'my_username')
    });
  },

  setupController: function(controller, models) {
    controller.setProperties(models);
  }
});

两者的JSON响应如下所示:

用户路线:

{
  "user": {
    "id":"1",
    "username":"my_username",
    "first_name":"John",
    "last_name":"Doe",
    "post_ids":[1, 2]
  }
}

帖子路线:

{
  "posts":[
    { "id": 1, "author": "John Doe", "text": "My post", "username": "my_username", "user_id": 1 },
    { "id": 2, "author": "John Doe", "text": "My post2", "username": "my_username", "user_id": 1 }
  ]
}

router.js

的代码
Router.map(function() {

  this.route('user', { path: '/:username' }, function() {
    this.route('posts');
  });

  this.route('login');
});

4 个答案:

答案 0 :(得分:2)

将ID以外的内容传递给findfindRecord方法时会发生此错误。我必须说,这不是一个非常有用的错误消息。

无论如何,你可以在这里阅读一些文档: http://emberjs.com/blog/2015/06/18/ember-data-1-13-released.html#toc_simplified-find-methods

答案 1 :(得分:1)

我有同样的错误。在我的情况下,问题是我的灯具不一致,如下例所示:

{{1}}

答案 2 :(得分:0)

我遇到了同样的错误,我设法通过查看Ember Inspector中的“Promises”选项卡来隔离导致问题的正确代码行,仅搜索拒绝承诺,其中一个具有履行/拒绝值“TypeError:无法读取未定义的属性'_internalModel'”。承诺的标签给了我记录失败的操作,模型和id。 https://github.com/emberjs/ember.js/issues/11863#issuecomment-123898242

在我的情况下,我从服务器返回{}作为对findRecord方法的响应。

答案 3 :(得分:0)

在我的情况下,服务器没有返回根元素。因此,对于用户服务器返回:

CharacterControl

代替

{name: name, surname: surname}