1

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

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

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

更新:

我的模型与此类似:

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 中没有它,所以它不存在于 DOM 中RecordModel,但骨干网仍然试图验证它。或者,如果我们在 DOM 中有这个输入,那么一切正常。

4

1 回答 1

1

如何允许空值但仍验证用户是否输入了某些内容?

默认情况下,如果您为属性配置验证器,则认为它是必需的。但是,如果您希望允许空值并在输入内容时仍进行验证,请添加required: false其他验证器。

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

如果您不能让空值(例如在创建时),Backbone.validation 会覆盖isValid将功能添加到默认行为。有趣的是我们可以传递的数组参数:

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

有了这个,我们就可以只验证目前模型中存在的字段:

model.isValid(_.keys(model.attributes));
于 2016-12-08T22:20:24.247 回答