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

时间:2016-12-08 13:40:59

标签: javascript backbone.js backbone.validation.js

我有一个动态呈现的视图。它可能有一些输入或可能没有。 在用户填写所有内容并尝试发送数据后,我致电this.model.isValid(true)(或this.model.isValid()),即使输入数据有效,也会返回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中不存在,但是主干仍然试图验证它。或者如果我们在DOM中有这个输入,那么一切正常。

1 个答案:

答案 0 :(得分: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));