почему форма всегда валидна?
помогите пожалуйста понять почему форма получается всегда валидной
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, время: 03:15. |