Backbone.js模型验证方法

时间:2012-04-16 20:08:47

标签: validation backbone.js

如何仅验证模型上的某些属性?目前,我检查传递给validate的对象中是否存在该属性:

validate: function(attrs) {

        // Number
        if (attrs.minimum) {
          if (isNaN(attrs.minimum)) {
            return -1;
          }
        }
        if (attrs.maximum) {
          if (isNaN(attrs.maximum)) {
            return -1;
          }
        }
}

但如果我想验证字符串值,那么:

if (attrs.mystring) {
 // Do validation
}

会失败并且验证永远不会发生。

2 个答案:

答案 0 :(得分:1)

Backbone现在支持has属性。所以你可以这样做:

    var Person = Backbone.Model.extend({
        defaults: {
            "name": "Kevin",
            "age" : 26,
            "job" : "web"
        },

        validate: function(attrs, options) {
            for(k in attrs) {
                if(!this.has(k)) {
                    return  k + ' attribute is not exist';
                }
            }
        }
    });

    var person = new Person;

    person.on("invalid", function(model, error) {
        console.log(error);
    });

答案 1 :(得分:0)

我对你的措辞感到有些困惑,但我想你想先检查它是不是一个空字符串?并且还找出它未定义的可能性..如果那么这就是你想要做的......

validate: function(attrs) {
    // Number
    if (attrs.minimum) {
      if (isNaN(attrs.minimum)) {
        return -1;
      }
    }
    if (attrs.maximum) {
      if (isNaN(attrs.maximum)) {
        return -1;
      }
    }
    if (typeof(attrs.mystring) != "undefined"){
      if (!attrs.mystring){
        return -1;
      }
    }
}

如果您只想验证其中一个属性,则应编写验证函数以相应地适应选项

validate: function(attrs, option) {
  if (!option){
    // Number
    if (attrs.minimum) {
      if (isNaN(attrs.minimum)) {
        return -1;
      }
    }
    if (attrs.maximum) {
      if (isNaN(attrs.maximum)) {
        return -1;
      }
    }
    if (!attrs.mystring){
      return -1;
    }
  }else{
    switch(option){
      case("string"):
        if (!attrs.mystring){
          return -1;
        }
      break;
      case("number"):
        // Number
        if (attrs.minimum) {
          if (isNaN(attrs.minimum)) {
            return -1;
          }
        }
        if (attrs.maximum) {
          if (isNaN(attrs.maximum)) {
            return -1;
          }
        }
      break;
    }
  }
}

有很多方法可以做到这一点,这可能是效率最低的大声笑,但使用你的例子,它将完成这项工作。

另外,这不是一个真正的骨干。每个人说的问题......但是一般的js