2016-11-23 9 views
0

Я использую уголек-кли: 2.5.0 и Ember-валидации: v2.0.0-alpha.5 В моей Ember-компоненте я валидация, который работает автоматически каждое изменение в атрибуте, но я хочу запустить эту проверку только в том случае, если я называю метод validate() в техническом терминале проверки подлинности лениво.Ember-проверка, как реализовать ленивые проверки

Пожалуйста, найдите ниже примеры кода,

import Ember from 'ember'; 
import EmberValidations, { validator } from 'ember-validations'; 

export default Ember.Component.extend(EmberValidations, { 

didReceiveAttrs() { 
    this.set('newBook', this._bookModel().create()); 
}, 

_bookModel(data = {}) { 
return Ember.Object.extend(EmberValidations, { 
    bookVersion: null, 
    isEditable: false, 
    validationActive: false, 
    validations: { 
    bookVersion: { 
     inline: validator(function() { 
if(this.validationActive){ //Here this.validationActive always return undefined 
     var version = this.model.get('bookVersion') || "", 
      message = []; 

     if (Ember.isEmpty(bookVersion)) { 
      message.push("Book Version is mandatory!!!"); 
     } 

     if (message.length > 0) { 
      return message.join(','); 
     } 
     } 
     }) 
    } 
    } 
}, data); 
} 

}); 

actions: { 
     this.get('newBook').set("validationActive",true); 
     this.get('newBook').validate().then(() => { 
      //Do the action 
     } 
} 

Я хочу выше проверки для запуска только вызова "this.get ('newBook'). Подтверждения()". Я совершенно новичок в ember so down-voter, пожалуйста, разместите свои комментарии перед тем, как голосовать за других, любезно сообщите мне о каких-либо дополнительных образцах кода.

Ваша помощь должна быть значительной.

ответ

1

Аддон, который вы используете для валидации («ember-validations»), очень популярен, и его документация довольно хорошо по сравнению с другими. Если вы посмотрите на документацию, в разделе documentation есть часть «Условные валидаторы». Вы можете использовать логическое свойство для управления, когда нужно выполнить валидацию.

Вы можете увидеть иллюстрацию того, что я имею в виду в следующем twiddle. Я создал простую проверку в контроллере приложения для имени пользователя. Поле имени должно иметь длину не менее 5, и проверка должна выполняться только в том случае, если условие validationActive истинно. Первоначально; условие ложно; что означает, что валидатор не работал, и свойство isValid контроллера Controller (которое унаследовано от EmberValidations Mixin). Если вы переключите свойство с предоставленной кнопкой; проверка будет выполняться (поскольку условие теперь установлено в true, поэтому выполняется проверка), а isValid вернется к false. Если вы измените значение; результат проверки будет соответствующим образом изменен в отношении значения имени пользователя. Если вы снова переключите условие, чтобы установить его на false; то isValid станет действительным независимо от того, что такое имя пользователя.

Надеюсь, это даст вам представление о том, как контролировать, когда ваши проверки должны работать.

Вот что вы должны сделать после своего редактирования: поле не определено, потому что вы пытаетесь найти собственное поле validationActive компонента в встроенном валидаторе. Пожалуйста, получите validationActive следующим образом: this.model.get('validationActive') и попробуйте. Он должен работать.

+0

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

+0

См. Часть, которую я обновил относительно вашего редактирования. – alptugd

+0

@alptugx Он работает как шарм, благодаря которому вы можете многое сделать для своей помощи. У меня есть еще один запрос, который вы знаете, как очистить эти ошибки проверки? – VelNaga

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

  • Нет связанных вопросов^_^