2014-11-19 7 views
0

Я хотел бы показать счетчик ошибок проверки для моего пользователя.Подсчитайте, сколько ошибок с помощью Ember-валидации?

Должно быть выполнено сообщение типа «У вас есть X ошибка (ы) слева» рядом с кнопкой отправки.

Есть ли способ сделать это?

Edit:

Я использую ember-validations2.0.0-alpha.1 и уголек 1.8.0 в контексте контроллера (без данных Ember).

Если я пытаюсь решение Сэма:

this.get('errors.length') // result is [], an empty array 

ответ

4

Ключ errors содержит объект, а не массив. Каждый ключ этого объекта ссылается на свойство вашей модели и указывает на массив сообщений об ошибках, поэтому вы можете делать такие вещи, как this.get('errors.firstName.length').

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

http://emberjs.jsbin.com/luzesiyeqi/1/


EDIT:

.length свойство errors объекта возвращает пустой массив из-за этого кода: https://github.com/dockyard/ember-validations/blob/master/addon/errors.js. Буквально любой ключ, который вы получаете на объекте errors, будет инициализирован пустым массивом.


EDIT 2:

Основываясь на том, что вы сказали в комментариях о не желая перебрать свойства, вы можете сделать это в альтернативной моды, глядя на validators собственности модели. Проверьте этот пример:

numErrors: function() { 
    var errorCounts = this.get('model.validators').mapBy('errors.length'); 
    return errorCounts.reduce(function (a, b) { return a + b }, 0); 
}.property('[email protected]') 

Я обновил JSBin тоже:

http://emberjs.jsbin.com/jucuxodaga/1/edit?html,js,output

+0

Здравствуйте, Я знаю, что свойство errors содержит объект, это «errors.length», который содержит массив (как я писал), и это очень удивительно, по крайней мере. Я предполагаю, что здесь есть ошибка, тогда я буду поднимать вопрос. Я просто подумал, что что-то пропустил. Ваше решение (извините !!) очевидно, и я не хочу просматривать все свойства моей модели, чтобы вычислить количество ошибок. Фактически, я задал этот вопрос, чтобы избежать этого решения. Однако, спасибо. И извините, я не могу согласиться. –

+0

При всем уважении вы спросили, как отобразить количество ошибок для пользователя, и я рассказал вам, как отображать тогда количество ошибок для пользователя. Если вы хотите ответить на другой вопрос, вы должны задать этот вопрос. И если у вас есть произвольные ограничения, например. «Я не хочу просматривать свойства», тогда вам тоже нужно поставить это в свой вопрос. – NudeCanalTroll

+0

Хорошо.Может быть, ты прав, я должен был указать на мое ограничение. С другой стороны, необходимость повторять все имена полей кажется очень уязвимой для меня ошибкой и таким плохим решением. Большое спасибо за ваши объяснения и окончательное решение! :-) –

0

Если вы используете ember-validations, это будет легко: this.errors.length.

+0

Это то, что я ожидал бы, но результат this.get ('errors.length') представляет собой массив из 0 элементов (что странно). –

Смежные вопросы