2015-03-27 36 views
7

Belirli alanlarda kendi özel doğrulamaları yapıyorum, böylece yalnızca belirli değerler kabul edildi (alana bağlı olarak) ve geri kalanı reddedildi. Doğrulama olarak adlandırılan özniteliği denetleyen ve özniteliğin hangi sözcüklerin kullanımına izin verildiğine karar veren bir "filtre" işlevi yazmak istiyorum. Normal Sails.js davranış, TabiiSu hattı doğrulama kuralı olarak adlandırılan hangi özellik nasıl bilinir?

module.exports = { 

    types: { 

     filter: function(attribute) { 

      if (attribute === 'number') { 
       switch(attribute.value) { 

        case 'one': 
         return true; 

        case 'two': 
         return true; 

        default: 
         return false; 

       } 
      } else if (attribute === 'color') { 
       switch(attribute.value) { 

        case 'red': 
         return true; 

        case 'blue': 
         return true; 

        default: 
         return false; 

       } 
      } 

     }, 


    }, 

    attributes: { 

     number: { 
      type: 'string', 
      required: true, 
      filter: true 
     }, 

     color: { 
      type: 'string', 
      required: true, 
      filter: true 
     } 
    } 
}; 

"attribute" özelliği olur olmaz, ama özelliğinin değeri: Yani modeli bu gibi bir şey olur. (Ve attribute.value sadece bir örnek, anlamı, orada öznitelik değerini istiyorum).

Doğrulama kuralı olarak adlandırılan asıl öznitelik olmak için attribute olmasını istiyorum. Bu Sails ile mümkün mü? Yani, modeldeki her alan için bir işlev yazabilirim, ama hepsine uyan bir işlevi olması hoş olurdu (çoğum var).

Teşekkürler.

cevap

1

Tamam, bu yüzden sorunuzu cevaplayacağım, ancak bu tam olarak istediğiniz gibi olmayabilir.

attributes: { 
    state: { 
    type: 'string', 
    enum: ['pending', 'approved', 'denied'] 
    } 
} 

Ama ben bu kod sadece örnekleyen bir örnek olduğunu kabul edecektir: Bir özellik biz bitiş hedefe ulaşmak istiyorum nasıl bir "enum" sahip olabilir. İşte çalışacağım bir yol.

module.exports = { 
 
     
 
     
 

 
     types: { 
 

 
      filter: function(attribute) { 
 

 
       if (attribute === 'number') { 
 
        switch(attribute.value) { 
 

 
         case 'one': 
 
          return true; 
 

 
         case 'two': 
 
          return true; 
 

 
         default: 
 
          this.validationErrors.push(attribute); 
 
          return false; 
 

 
        } 
 
       } else if (attribute === 'color') { 
 
        switch(attribute.value) { 
 

 
         case 'red': 
 
          return true; 
 

 
         case 'blue': 
 
          return true; 
 

 
         default: 
 
          this.validationErrors.push(attribute); 
 
          return false; 
 

 
        } 
 
       } 
 

 
      }, 
 

 

 
     }, 
 

 
     attributes: { 
 
      validationErrors:(function(){ 
 
       
 
       var errors = []; 
 
       
 
       return { 
 
       push:function(attr){ 
 
        errors.push(attr); 
 
       }, 
 
       get:function(){ 
 
        return errors; 
 
       } 
 
       }; 
 
       
 
      })(), 
 

 
      number: { 
 
       type: 'string', 
 
       required: true, 
 
       filter: true 
 
      }, 
 

 
      color: { 
 
       type: 'string', 
 
       required: true, 
 
       filter: true 
 
      } 
 
     } 
 
    };

Düzenleme: Bir özelliğin

bir nitelik yöntemi yerine kullanılmış potansiyel olarak bu cevap birkaç sorun var. Bu özel tip işlevler içinde su hattının "bunu" nasıl işlediğinden emin değilim. "Bu" modele bağlı mı? Ya da yarattığımız modelin örneği? Burada sorulması gereken çok fazla soru var ama belki bu size bazı fikirler verebilir ve bir tartışma oluşturabilir.