model.isValid始终返回undefined

时间:2017-04-13 06:31:21

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

当我在我的主干模型上调用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 {

            }
        }
    })
});

2 个答案:

答案 0 :(得分:0)

请在提问之前阅读文档。

  

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

  

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

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

答案 1 :(得分:0)

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

  

检查属性,属性数组或整个属性   模型有效。

     未发生验证时,

isValid会返回undefined   model有验证(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']);

default isValid of a Backbone Model将始终返回布尔值。