使用 Backbone.Validation 跳过模型属性验证

Skip validation of model attribute using Backbone.Validation

我有一个动态呈现的视图。它可能有一些输入,也可能没有。 在用户填写所有内容并尝试发送数据后,我调用 this.model.isValid(true) (或 this.model.isValid() )并且它 returns false 即使来自输入的数据有效。

我认为原因是 Backbone Validation 试图验证我们未呈现的输入的属性。

如果我们没有 sticked 个视图元素,是否有任何解决方案可以跳过模型属性?

更新:

我的模型类似这样:

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 中不存在它,但 backbone 仍会尝试验证它。或者,如果我们在 DOM 中有此输入,一切正常。

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

By default, if you configure a validator for an attribute, it is considered required. However, if you want to allow empty values and still validate when something is entered, add required: false in addition to other validators.

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));