0

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

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
}

会失败,验证永远不会发生。

4

2 回答 2

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);
    });
于 2015-02-01T18:18:02.010 回答
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;
    }
  }
}

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

另外,这并不是一个真正的backbone.js问题...但是一般的js

于 2012-04-16T20:15:42.767 回答