Ember - проблема с привязкой класса внутри помощника

Мы обновились до Ember 1.11.1 и Ember-validations 2.0.0-alpha.3.

контроллер

export default Ember.Controller.extend(EmberValidations.Mixin, { 
  canValidate: true,
  validationModel: Ember.computed.alias("model"),
  validations: {
   'validationModel.name': {
      presence: { 'if': 'canValidate', message: 'Please enter a name'},
   },
  },
}

шаблон

{{log "error value" errors.validationModel.name}}
{{input classBinding="errors.validationModel.name:app_input_box_error:app_input_box" placeholder="Document Name" value=model.name}}

При наличии вышеуказанного кода шаблона валидация работает, как и ожидалось, и класс входных данных выпадает в зависимости от того, есть ли ошибка валидации или нет. Однако при удалении строки {{log}} привязка к классу кажется потерянной, и входной класс больше не обновляется соответствующим образом. Любой совет по поводу причины / исправить, пожалуйста?

Примечание. Привязки классов вне помощников, например, в стандартном div, продолжают работать правильно

2 ответа

Может быть, попробуйте это:

{{input classBinding="errors.validationModel.name:app_input_box_error:app_input_box" placeholder="Document Name" value=validationModel.name}}

Я не вижу classBinding но classNameBindings в документах я не уверен, что что-то не понравилось на этом пути.

Я подозреваю, что classBinding не вызывает обновление свойства, я, кажется, напомнил некоторые проблемы с этим при проверке ember в какой-то момент не всегда срабатывает. Загляните на https://github.com/aceofspades/ember-validations/commit/85ecaa348f2a1ccfb52f614037c4b4dbf77bceb4 и посмотрите, может ли это помочь.

С более высокого уровня, я думаю, вы будете часто повторять этот шаблон, добавляя имя класса на основе ошибок, связанных с конкретным полем. Лично я мог бы потратить некоторое время на поиск или создание компонента ввода, который обрабатывает аннотацию для проверки на угли, где вы можете иметь fieldName собственности и посмотреть на соответствующие errors.validation.${fieldName}, Кодирование в JS может помочь или, по крайней мере, упростить отладку.

Это не совсем точно связано с отдельными полями, но может также помочь вам, в частности, перейти к синтаксису HTMLBars, т.е.

{{input class="{{if errors.validationModel.name 'app_input_box_error' 'app_input_box'}}"}}
Другие вопросы по тегам