Как получить доступ к ошибкам Ember JSON API в шаблоне

У меня есть следующий крючок модели маршрута:

model() {
    return this.store.query('page').then(
        (result) => { return result; },
        (errors) => { return errors; }
    );
}

Я возвращаю базовую ошибку в своем API, чтобы определить лучший способ отображения ошибок в случае сбоя API при попытке заполнить исходную модель.

Ответ:

{
    "errors": [
      {
         "detail": "Test",
         "source": {
             "pointer": "data/attributes/general"
         }
      }
    ]
}

Это поймано, и у меня осталась модель, содержащая ErrorClass.

ошибка консоли

Я ожидаю, что указанная выше ошибка будет доступна с помощью «общего» ключа и сможет сделать следующее в шаблоне:

{{#each model.errors.general as |error|}}
    <div class="error msg_animate">{{error.message}}</div>
{{/each}}

Но я не могу получить доступ к ошибкам таким образом. Кажется, мой ответ об ошибке анализируется неправильно, потому что я могу получить доступ к ошибкам как таковым:

{{#each model.errors as |error index|}}
    <div class="error msg_animate">{{error.detail}} - {{error.source.pointer}}</div>
{{/each}}

Это сопоставляется с базовым ErrorClass, показанным выше, и выводит:

Test - data/attributes/general

Это неожиданно. Что мне не хватает?

ОБНОВЛЕННАЯ ИНФОРМАЦИЯ

У меня есть следующее, которое работает на другом маршруте. Разница в том, что он возвращает ошибки после попытки сохранить модель (а не напрямую из хука model():

template.hbs

{{#each model.errors as |error|}}
    <div class="error msg_animate">{{error.message}}</div>
{{/each}}

route.js

actions: {
    submit: function(model){
        model.save().then((resp) => {
            this.transitionTo('admin.page-edit', resp.data.attributes.permalink);
        }, function(resp){
            // errors show on template
        });
    }
}

Я совсем запутался в разнице. Оба ответа от моего API кажутся абсолютно одинаковыми с точки зрения формата.


person Gurnzbot    schedule 05.10.2016    source источник
comment
если model.errors это массив, то каждый model.errors.general не имеет смысла, верно?   -  person Mark Fox    schedule 05.10.2016
comment
Почему следующее тоже не сработает? {{#if model.errors.general}} <div class="error msg_animate">{{model.errors.general.message}} </div> {{/if}}` Я ожидаю, что это сработает, основываясь на других вещах, которые я читал на SO. Я мог бы быть далеко, конечно.   -  person Gurnzbot    schedule 05.10.2016
comment
подумайте об этом так, как будто model.errors — это список ошибок, поэтому вы можете получить доступ к первой с помощью model.errors[0], и если у первой ошибки был общий ключ, вы могли бы получить к ней доступ, как model.errors[0].general — каждый руль предназначен для использования со структурами, подобными спискам, а не с картой. подобные структуры   -  person Mark Fox    schedule 05.10.2016
comment
@Gurnzbot Внутри hbs вы можете сказать {{log 'model.errors - ' model.errors}} .. это напечатает объект в консоли. это должно многое объяснить.   -  person Ember Freak    schedule 06.10.2016
comment
@kumkanillam Я не знал, что это так :) Я обнаружил, что он регистрирует объект ошибки, который я передал из бэкэнда JSON API. Имеет клавиши detail и source -> pointer. Я ожидаю, что смогу получить доступ к ошибкам из моей модели, как описано здесь. Однако это не работает. Является ли проблема тем фактом, что я изначально возвращаю ошибку из моего хука model()? Должен ли я использовать подсостояние ошибки вместо исходного шаблона?   -  person Gurnzbot    schedule 06.10.2016
comment
@Gurnzbot Честно говоря, я этого раньше не делал. На вашем снимке экрана я вижу isAdapter:true, если для него установлено значение true, ваши ответы об ошибках не анализируются и не задаются в хэше модели errors. поэтому, пожалуйста, убедитесь, что код состояния 422 должен прийти.   -  person Ember Freak    schedule 06.10.2016