【问题标题】:Ember.js Error | Cannot read property 'some' of undefinedEmber.js 错误 |无法读取未定义的“某些”属性
【发布时间】:2016-06-05 17:49:52
【问题描述】:

我在前端使用 Ember,我正在做基本测试,看看我是否可以在添加组件之前正确呈现我的数据。我有两个资源“主题”和“评级”,并且为这些资源添加了路线和模型挂钩。当我输入http://localhost:4200/topics 时,我可以看到模板上呈现的所有主题。但是,当我输入 http://localhost:4200/ratings 时,我在控制台上收到一条错误消息:

ember.debug.js:32096TypeError: Cannot read property 'some' of undefined
    at error (route.js:21)
    at Object.triggerEvent (ember.debug.js:28580)
    at Object.trigger (ember.debug.js:53473)
    at Object.Transition.trigger (ember.debug.js:53287)
    at ember.debug.js:53107
    at tryCatch (ember.debug.js:53806)
    at invokeCallback (ember.debug.js:53821)
    at publish (ember.debug.js:53789)
    at publishRejection (ember.debug.js:53724)
    at ember.debug.js:32054

这很奇怪,因为在我的 rails 控制台中,我收到了 HTTP: 200 响应。我的路线代码中是否有一些错误?我确保反映与主题相似的评级。或者这是一个关联问题? USER 和 TOPIC 都有很多评分。我在下面提供了我的代码的 sn-ps:

申请途径:

import Ember from 'ember';

export default Ember.Route.extend({
  auth: Ember.inject.service(),
  flashMessages: Ember.inject.service(),

  actions: {
    signOut () {
      this.get('auth').signOut()
      .then(() => this.transitionTo('sign-in'))
      .then(() => {
        this.get('flashMessages').warning('You have been signed out.');
      })
      .catch(() => {
        this.get('flashMessages')
        .danger('There was a problem. Are you sure you\'re signed-in?');
      });
      this.store.unloadAll();
    },

    error (reason) {
      let unauthorized = reason.errors.some((error) =>
        error.status === '401'
      );

      if (unauthorized) {
        this.get('flashMessages')
        .danger('You must be authenticated to access this page.');
        this.transitionTo('/sign-in');
      } else {
        this.get('flashMessages')
        .danger('There was a problem. Please try again.');
      }

      return false;
    },
  },
});

评级模型:

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo } from 'ember-data/relationships';

export default Model.extend({
  score: attr('number'),
  user: belongsTo('user'),
  topic: belongsTo('topic')
});

评价路线:

import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
    return this.get('store').findRecord('rating', params.id);
  },
});

```

评分路线:

import Ember from 'ember';

export default Ember.Route.extend({
  model() {
    return this.get('store').findAll('rating');
  },
});

路由器:

import Ember from 'ember';
import config from './config/environment';

const Router = Ember.Router.extend({
  location: config.locationType,
});

Router.map(function () {
  this.route('sign-up');
  this.route('sign-in');
  this.route('change-password');
  this.route('users');
  this.route('topics');
  this.route('topic', { path: '/topics/:id'});
  this.route('ratings');
  this.route('rating', { path: '/ratings/:id'});
  // Custom route in topics controller that will call NYT API or generate random-show
  //topic. This is a GET request essentially
  this.route('random-show');
});

export default Router;

【问题讨论】:

  • 在你的error函数里面,可以console.log reason看看reason的值是多少吗?
  • EmberError {description: undefined, fileName: undefined, lineNumber: undefined, message: "Assertion Failed: You need to pass a model name to the store's modelFor method", name: "Error"...} description : undefined fileName : undefined lineNumber : undefined message : "Assertion Failed: You need to pass a model name to the store's modelFor method" name : "Error" number : undefined stack : (...) get stack : get stack() set堆栈:设置堆栈()proto:错误
  • 获取评分的 API 响应是什么?
  • 已解决!阅读文档,并使用 EXPLICIT INVERSNESS:guides.emberjs.com/v2.5.0/models/relationships 显然,Ember 需要帮助理解当您有多个 has Many 或 Belong to 用于同一类型。

标签: ruby-on-rails ember.js ember-data ember-router


【解决方案1】:

已解决!阅读文档,并使用显式反转:

https://guides.emberjs.com/v2.5.0/models/relationships/

显然,Ember 需要帮助理解当您有多个 has Many 或 Belong to 用于同一类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2021-12-31
    • 2022-10-05
    • 2022-07-06
    相关资源
    最近更新 更多