2016-12-08 4 views
1

У меня есть представление, которое отображается динамически. Он может иметь некоторые входы или может не иметь. После того, как пользователь заполняет все и пытается отправить данные, я вызываю this.model.isValid(true) (или this.model.isValid()), и он возвращает false, даже если данные с входов действительны.Пропустить проверку атрибута модели с использованием Backbone.Validation

Я думаю, что причина Backbone Validation пытается проверить атрибуты входных данных, которые мы не отображали.

Есть ли какое-либо решение пропустить атрибуты модели, если у нас нет sticked элементов вида?

UPDATE:

Мой модель похожа на это:

MyApp.module("RecordModel", function (RecordModel, MyApp, Backbone) { 
    RecordModel.recordModel = Backbone.Model.extend({ 
     validation: { 
      inn: { 
       pattern: 'inn', 
       msg: MyApp.messages.inn 
      }, 

      bik: { 
       pattern: 'bik', 
       msg: MyApp.messages.bik 
      }, 

      uin: { 
       pattern: 'uin', 
       msg: MyApp.messages.uin 
      }, 

      sum: { 
       pattern: 'sum', 
       msg: MyApp.messages.sum 
      } 

     } 
    }); 
}); 

Наручники:

bindings: { 

    '#uin': { 
     observe: 'uin', 
      setOptions: { 
      validate: true 
     }, 

     events: MyApp.Validation.events.inputEvents 
    }, 

    '#bik': { 
     observe: 'bik', 
      setOptions: { 
      validate: true 
     }, 
     events: MyApp.Validation.events.inputEvents 
    }, 

    '#inn': { 
     observe: 'inn', 
      setOptions: { 
      validate: true 
     }, 
     events: ParkingMate.Validation.events.inputEvents 
    }, 

    '#sum': { 
     observe: 'sum', 
      setOptions: { 
      validate: true 
     }, 
     events: MyApp.Validation.events.inputEvents 
    } 
} 

Так что по какой-то причине мы не представляем вход #sum. Поскольку мы не попали в наш DOM, он не существует в RecordModel, но магистраль все еще пытается его проверить. Или, если у нас есть этот вклад в нашей DOM, все работает нормально.

+0

нужна дополнительная информация о том, как реализована ваша проверка модели для этих полей. –

+0

Denis прав, пожалуйста, укажите [mcve]. –

ответ

1

How can I allow empty values but still validate if the user enters something?

По умолчанию, если настроить валидатор для атрибута, то считается требуется. Однако, если вы хотите разрешить пустые значения и все еще проверяют, когда что-то введено, добавьте required: false в , а также другие валидаторы.

validation: { 
    value: { 
     min: 1, 
     required: false 
    } 
} 

Если вы не можете позволить пустые значения (как при создании), Backbone.validation overrides isValid добавление функций поведение по умолчанию. Что интересно, это параметр массива мы можем передать:

// Check if name and age are valid 
var isValid = model.isValid(['name', 'age']); 

С этим, мы можем утверждать только те поля, которые существуют в рамках модели на данный момент:

model.isValid(_.keys(model.attributes)); 
+1

См. Обновление, пожалуйста. Ваше второе решение довольно хорошо, но вместо 'model.attributes' я попытаюсь собрать отображаемые идентификаторы ввода и передать их в качестве аргументов в' model.isValid() ', так как идентификаторы входов и имена атрибутов совпадают. – nllsdfx

+0

@DmitrySoroka да, ваша техника будет работать. Мой пример с использованием '_.keys' предназначен только для демонстрации способа, но может не работать из коробки в вашем контексте. –

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

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