почему форма всегда валидна?
помогите пожалуйста понять почему форма получается всегда валидной
jsfiddle: http://jsfiddle.net/udXL5/629/ я использую плагин backbone-validation и бутстраповские модальные окна. в модели прописываю такие правила валидации:
APP.DiaryModel = Backbone.Model.extend({
defaults: {
title: undefined,
desc: undefined
},
validation: {
title: [
{ required: true, msg: 'Поле не может быть пустым' },
{ minLength: 3, msg: 'Введите не менее 3 символов' }
],
desc: [
{ maxLength: 200, msg: 'Введите не более 200 символов' }
]
}
});
после того как я пытаюсь сабмитить форму с пустым полем #diaryTitle, я получаю в консоли следующее:
is v true true true
(index):164 valid r {cid: "c3", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
то есть получается так что форма валидна(!). а в реальности она не валидна. потому что поле #diaryTitle пустое код, отвечающий за валидацию в APP.DiariesView:
events:{
'click #showAddDiaryModal' : 'showAddDiaryModal',
'click #addDiaryBtn' : 'addDiary'
},
addDiary: function() {
var titleValue = $.trim(this.$el.find('#diaryTitle').val()),
descValue = $.trim(this.$el.find('#diaryDesc').val());
var model = new APP.DiaryModel();
model.set({
title: titleValue,
desc: descValue
});
console.log('is v', model.isValid(), model.isValid('title'), model.isValid('desc'))
if(model.isValid()) {
console.log('valid', titleValue, descValue, model)
} else {
console.log('invalid')
};
}
|
1. Model нужно инициализировать ДО биндинга ( http://jsfiddle.net/udXL5/632/ )
2. Валидация model при set() работает принудительно { validate : true } в отличие от save() 3. По умолчанию метод isValid() возвращал true при заданных аттрибутах ( посмотреть: console.log( model.isValid ); )
var model = new APP.DiaryModel();
this.model = model
Backbone.Validation.bind( this, {
attributes : ['title', 'desc']
} );
model.set({
title: titleValue,
desc: descValue
},
{
validate: true
});
обратил внимание на:
this.$el.find('#diariesListInner')
а что, такая запись не работает:
this.$('#diariesListInner')
? |
Цитата:
я так понял, что для того чтобы пользоваться плагином, нужно обязательно view присвоить модель таким образом: this.model = model потому что чуть позже в биндинге используется this:
Backbone.Validation.bind(this, {
attributes : ['title', 'desc']
});
правильно? но в этом случае получается, чт оя неправильно спроектировал программу вообще. потому что APP.DiariesView это не APP.DiaryView и прописывать модель модель только для того чтобы заработал плагин это не правильно и является костылём... |
Цитата:
The validation binding code is executed with a call to Backbone.Validation.bind(view). There are several places that it can be called from, depending on your circumstances, but it must be called after your model or collection has been initialized. ( и доступные примеры использования это также подтверждают ), т.е. в нашем случае конструктор должен создать объект и о модели мы уже говорим, не как о конструкторе (классе), а как о возвращаемом объекте (экземпляре класса) Тогда this.model = model годится если ссылается на экземпляр, а не на конструктор (я так понял замысел автора) Цитата:
|
| Часовой пояс GMT +3, время: 11:19. |