2015-08-01 3 views
0

Я пытаюсь создать компонент, который создает поле ввода для определенного поля на Ember.model.Соблюдать свойство error на Ember.Model

При вызове model.save() Я хотел бы отобразить возможные сообщения об ошибках относительно этого поля, прямо под полем. Но я не могу получить уведомление, когда мое свойство Errors на Ember.Model изменится.

Есть ли способ ознакомиться с недвижимостью model.errors, чтобы отобразить ошибки?

Я пробовал:

  • .Property Свойство { 'model.errors} и Ember.computed
  • .observes ('model.errors')
  • .observes ('модель') на. («becameInvalid»)

Я думаю, что я довольно близко, так как мои ошибки с ниже решения, в настоящее время dipslayed, однако, когда я изменить свой вклад в чем-то другом недействительных, и попытаться сохранить снова, мой оригинал ошибки не очищаются, а новые - не g et. Когда я поставил точки останова или console.logs, я вижу, что код никогда не входит в этот раздел для отображения ошибок снова, поэтому я предполагаю, что вычисленное свойство не работает. И мой шаблон никогда не обновляется новыми ошибками.

Вот мой код на данный момент:

Мой компонент: компоненты/InputField-text.js

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    value: Ember.computed('model', 'field', { 
    get: function() { 
      return this.get('model').get(this.get('field')); 
    }, 
    set: function(key, value) { 
     this.get('model').set(this.get('field'), value); 
      return value; 
    } 
    }), 
    errors: function(){ 
     var errors = this.get('model.errors'); 
     console.log(errors) 
     return errors.errorsFor(this.get('field')); 
    }.property('model.errors', 'model', 'field') 
}); 

мой компонент в шаблон: шаблоны/Компоненты/InputField-text.hbs

{{input type='text' value=value class='form-control' placeholder=placeholder}} 

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

И для полноты кода, который я использую для внедрения компонент в шаблоне:

{{inputfield-text model=model field='name'}} 

ответ

0

Нашли это, мне пришлось добавить [] в мое вычисленное свойство, исправить код ниже, заметить разницу между ними.

property('model.errors', 'model', 'field') 

И

property('model.errors.[]') 

Правильный код компонента: компоненты/InputField-text.js

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    value: Ember.computed('model', 'field', { 
    get: function() { 
      return this.get('model').get(this.get('field')); 
    }, 
    set: function(key, value) { 
     this.get('model').set(this.get('field'), value); 
      return value; 
    } 
    }), 
    errors: function(){ 
     var errors = this.get('model.errors'); 
     console.log(errors) 
     return errors.errorsFor(this.get('field')); 
    }.property('model.errors.[]') 
}); 
Смежные вопросы