Я использую Aurelia-проверку и моя проверка работает нормально, если я использую переменные, но мне нужно, чтобы проверить свойство объекта, а не переменный:Как использовать aurelia-validate с свойствами объекта для проверки?
Вот что работает:
import {Validation} from 'aurelia-validation';
import {ensure} from 'aurelia-validation';
import {ItemService} from './service';
export class EditItem {
static inject() {
return [Validation, ItemService];
}
@ensure(function(it){
it.isNotEmpty()
.hasLengthBetween(3,10);
})
name = '';
@ensure(function(it){
it.isNotEmpty()
.hasMinLength(10)
.matches(/^https?:\/\/.{3,}$/) //looks like a url
.matches(/^\S*$/); //no spaces
})
url = '';
constructor(validation, service) {
this.validation = validation.on(this);
this.service = service;
}
activate(params){
return this.service.getItem(params.id).then(res => {
console.log(res);
this.name = res.content.name; //populate
this.url = res.content.url;
});
}
update() {
this.validation.validate().then(
() => {
var data = {
name: this.name,
url: this.url
};
this.service.updateItem(data).then(res => {
this.message = "Thank you!";
})
}
);
}
}
Вот что я пытаюсь сделать (но не работает) ... также я не уверен, что лучше сохранить свойства в классе или иметь свойство, называемое this.item
, которое содержит свойства (это типичный угловой путь):
import {Validation} from 'aurelia-validation';
import {ensure} from 'aurelia-validation';
import {ItemService} from './service';
export class EditItem {
static inject() {
return [Validation, ItemService];
}
@ensure(function(it){
it.isNotEmpty()
.hasLengthBetween(3,10);
})
this.item.name; //no assignment here should happen
@ensure(function(it){
it.isNotEmpty()
.hasMinLength(10)
.matches(/^https?:\/\/.{3,}$/) //looks like a url
.matches(/^\S*$/); //no spaces
})
this.item.url; //no assignment?
constructor(validation, service) {
this.validation = validation.on(this);
this.service = service;
this.item = null;
}
activate(params){
return this.service.getItem(params.id).then(res => {
console.log(res);
this.item = res.content; //populate with object from api call
});
}
update() {
this.validation.validate().then(
() => {
var data = {
name: this.item.name,
url: this.item.url
};
this.service.updateItem(data).then(res => {
this.message = "Thank you!";
})
}
);
}
}
Может ли кто-нибудь дать мне несколько советов о том, как использовать валидатор против существующего объекта (для страницы редактирования)?
Можете ли вы описать класс 'option b'? Предлагаете ли вы создать второй класс для экземпляра 'item'? – chovy
@chovy ах, я утверждал, что элемент был классом. Поскольку вы получаете его от службы, это, вероятно, JSON, и в этом случае вы не можете использовать декоратор @ -ensure. Вы все равно можете создать репозиторий, который обертывает вашу службу, выполняет вызов, а затем добавляет проверку на элемент с помощью свободного API проверки. –