0

当我调用我的骨干模型时,即使是否满足验证规则,isValid()它也会始终返回。undefined这里可能出了什么问题?

这里可能是什么问题,我该如何解决?

我的模型:

Backbone.Model.extend({

    validation: {

            firstname: { required: true, msg: _('First Name is required').translate() }
        ,   lastname: { required: true, msg: _('Last Name is required').translate() }
    }
});

我的观点:

Backbone.View.extend({

        events: {
            'submit form[data-action="specify-pbt"]': 'specifyPBT'
        }

    ,   bindings: {
            '[name="firstname"]': 'firstname'
        ,   '[name="lastname"]': 'lastname'
        }

    ,   initialize: function(options) {
            this.model = options.model || new PBTSpecifyModel(); // The latter condition is always met

            BackboneCompositeView.add(this);
            BackboneFormView.add(this);
            Backbone.Validation.bind(this);
        }

    ,   specifyPBT: function (e)
        {
            var options = jQuery(e.target).serializeObject();

            console.log("model: ");
            console.log(this.model);  // Outputs the model: looks all correct
            console.log("isValid: ");
            console.log(this.model.isValid()); // Outputs undefined
            console.log("validationError: ");
            console.log(this.model.validationError); // Outputs null
        }

    ,   getContext: function()
        {
            return {

            }
        }
    })
});
4

2 回答 2

0

Backbone.Validation有一个文档条目,其版本isValid与默认的 Backbone 不同。

检查属性、属性数组或整个模型是否有效。

isValidundefined当没有发生验证并且模型具有验证时返回(Backbone v0.9.9 除外,其中从构造函数调用验证),否则为 true 或 false。

如果您不传递参数,则将验证属性绑定选项定义的属性。如果没有使用属性选项,则不会进行验证。

var isValid = model.isValid();

如果您将 true 作为参数传递,这将在返回结果之前强制进行验证:

var isValid = model.isValid(true);

如果您传递一个属性的名称或一个名称数组,您可以检查这些属性是否有效:

// Check if name is valid
var isValid = model.isValid('name');

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

骨干模型默认值isValid将始终返回一个布尔值。

于 2017-04-13T14:15:56.460 回答
0

请在提问前阅读文档。

isValid model.isValid()
运行验证以检查模型状态。

validate model.validate(attributes, options)
此方法 未定义,鼓励您使用任何自定义验证逻辑覆盖它

您使用的是插件,而不是主干本身的验证方法。按照插件说明如何检查验证状态。

于 2017-04-13T09:33:48.243 回答