Ключ 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
Здравствуйте, Я знаю, что свойство errors содержит объект, это «errors.length», который содержит массив (как я писал), и это очень удивительно, по крайней мере. Я предполагаю, что здесь есть ошибка, тогда я буду поднимать вопрос. Я просто подумал, что что-то пропустил. Ваше решение (извините !!) очевидно, и я не хочу просматривать все свойства моей модели, чтобы вычислить количество ошибок. Фактически, я задал этот вопрос, чтобы избежать этого решения. Однако, спасибо. И извините, я не могу согласиться. –
При всем уважении вы спросили, как отобразить количество ошибок для пользователя, и я рассказал вам, как отображать тогда количество ошибок для пользователя. Если вы хотите ответить на другой вопрос, вы должны задать этот вопрос. И если у вас есть произвольные ограничения, например. «Я не хочу просматривать свойства», тогда вам тоже нужно поставить это в свой вопрос. – NudeCanalTroll
Хорошо.Может быть, ты прав, я должен был указать на мое ограничение. С другой стороны, необходимость повторять все имена полей кажется очень уязвимой для меня ошибкой и таким плохим решением. Большое спасибо за ваши объяснения и окончательное решение! :-) –