Невозможно вызвать класс как функцию - PullRequest
0 голосов
/ 07 мая 2018

В настоящее время у меня возникла проблема с вычисляемыми свойствами, у меня есть модель с именем crossconnection, содержащая некоторые вычисляемые свойства, такие как:

relevantPoints: computed(function () {

    if (this.get('IsCA') === true && this.get('IsCM') === true) {
        return "/assets/images/big/ca-cm.png";
    }
    else if (this.get('IsCA') === true && this.get('IsCM') === false) {
        return "/assets/images/big/ca.png";
    }
    else if (this.get('IsCA') === false && this.get('IsCM') === true) {
        return "/assets/images/big/cm.png";
    }
    else if (this.get('IsCA') === false && this.get('IsCM') === false) {
        return "/assets/images/big/nca-ncm.png";
    }

}),

при запуске проекта я получаю следующую ошибку:

Uncaught TypeError: Невозможно вызвать класс как функцию

Может кто-нибудь уточнить, пожалуйста?


PS: Я использую,

  • Ember: 3.0.0
  • Ember Data: 3.0.2
  • jQuery: 3.3.1

Обновление:

Пояснения: у меня есть модель 'перекрестного соединения', которая содержит некоторые вычисленные свойства, моя модель вызывается из контроллера через простой

from = this.store.query('crossconnection ', {
            fromOpKey: this.get('opSelected').get('opKey'),
            limit: -1
        });

Что приводит к следующей ошибке (присоединена полная трассировка стека)

Uncaught TypeError: Cannot call a class as a function
    at classCallCheck (ember-babel.js:11)
    at Object.Class [as Object] (core_object.js:25)
    at Module.callback (crossconnection.js:65)
    at Module.exports (loader.js:106)
    at requireModule (loader.js:27)
    at Class._extractDefaultExport (index.js:410)
    at Class.resolveOther (index.js:110)
    at Class.superWrapper [as resolveOther] (ember-utils.js:420)
    at Class.resolve (resolver.js:133)
    at _resolve (container.js:871)
classCallCheck  @   ember-babel.js:11
Class   @   core_object.js:25
(anonymous) @   crossconnection.js:65
Module.exports  @   loader.js:106
requireModule   @   loader.js:27
_extractDefaultExport   @   index.js:410
resolveOther    @   index.js:110
superWrapper    @   ember-utils.js:420
resolve @   resolver.js:133
_resolve    @   container.js:871
resolve @   container.js:574
resolve @   container.js:578
factoryFor  @   container.js:136
factoryFor  @   container_proxy.js:40
modelFactoryFor @   -private.js:11593
_modelFactoryFor    @   -private.js:11556
_modelFor   @   -private.js:11547
modelFor    @   -private.js:11540
_query  @   -private.js:8666
_query  @   -private.js:10819
query   @   -private.js:10806
(anonymous) @   ops.js:55
applyStr    @   ember-utils.js:524
sendEvent   @   ember-metal.js:257
notifyObservers @   ember-metal.js:1103
propertyDidChange   @   ember-metal.js:886
set @   ember-metal.js:2893
set @   observable.js:104
openOpPopupWithKey  @   ops.js:143
send    @   action_handler.js:28
(anonymous) @   action.js:124
exports.flaggedInstrument   @   ember-metal.js:3920
(anonymous) @   action.js:123
_run    @   backburner.js:758
_join   @   backburner.js:736
join    @   backburner.js:477
run.join    @   ember-metal.js:4366
handler @   action.js:102
(anonymous) @   event_dispatcher.js:234
dispatch    @   jquery.js:5183
elemData.handle @   jquery.js:4991

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Пожалуйста, убедитесь, что вы импортируете computed правильно:

import { computed } from '@ember/object';

0 голосов
/ 08 мая 2018

Редактировать - похоже, это не является причиной ошибки, но я оставлю это здесь пока

Вам не хватает аргумента в ваших вычислениях. Computed принимает сначала атрибуты для просмотра в виде строк, а затем функцию обратного вызова:

relevantPoints: computed(‘isCA’, ‘isCM’, function () {

    if (this.get('IsCA') === true && this.get('IsCM') === true) {
        return "/assets/images/big/ca-cm.png";
    }
 ...,
}),

Этот ответ относится к 1.13 - 3.x, с одной небольшой модификацией фрагментов кода для <3.0. Версии приложения менее 3.0 должны использовать Ember.computed вместо вычисленных. </em>

...