1

J'utilise sous le champ dans SimpleSchema,Autovalue dans SimpleSchema pour la mise à jour ne précise pas la valeur donnée

"fileNo": { 
    type: String, 
    label: "File No.", 
    autoValue: function() { 
     console.log('this', this); 
     console.log('typeof this.value.length ', typeof this.value.length); 
     console.log('this.value.length ', this.value.length, this.value.length === 0, this.value.length == 0); 
     console.log('this.value ', this.value, typeof this.value); 
     console.log('this.operator ', this.operator); 
     console.log('this.isSet ', this.isSet); 
      if (this.isSet && 0 === this.value.length) { 
       console.log('if part ran.'); 
       return "-"; 
      } else { 
       console.log('else part ran.'); 
      } 
     }, 
    optional:true 
    }, 

J'utilise autoform-update un champ. Le problème est lorsque je mets à jour le champ avec la chaîne vide (c'est-à-dire en gardant la zone de texte vide), la valeur - n'est pas définie selon la définition du champ dans le code SimpleSchema ci-dessus.

-je obtenir les journaux comme ci-dessous,

clients.js:79 this {isSet: true, value: "", operator: "$unset", unset: ƒ, field: ƒ, …} 
clients.js:80 typeof this.value.length number 
clients.js:81 this.value.length 0 true true 
clients.js:82 this.value string 
clients.js:83 this.operator $unset 
clients.js:84 this.isSet true 
clients.js:86 if part ran. 
clients.js:79 this {isSet: true, value: "-", operator: "$unset", unset: ƒ, field: ƒ, …} 
clients.js:80 typeof this.value.length number 
clients.js:81 this.value.length 1 false false 
clients.js:82 this.value - string 
clients.js:83 this.operator $unset 
clients.js:84 this.isSet true 
clients.js:89 else part ran.  

et mon document de collection n'a pas de champ fileNo.

Qu'est-ce qui me manque? tout ce que je veux, c'est quand la valeur fileNo est empty/undefined la valeur doit être définie sur - (trait d'union). Dans le document, il doit ressembler à fileNo : "-"

+0

Quels sont exactement vous essayez d'atteindre? – Styx

+0

@Styx: dernière ligne modifiée en gras. Merci d'avance. –

+0

Peut-être, le 'defaultValue' est ce que vous avez besoin? – Styx

Répondre

0

Vous devez gérer 2 situations:

  1. document insert avec vide (non définie) value pour fileNo.

  2. Document update avec le code vide value pour fileNo.

En second cas, validateur va essayer de supprimer le champ du document si sa valeur est une chaîne vide (optional: true). Nous pouvons attraper et empêcher cela.

fileNo: { 
    type: String, 
    label: 'File No.', 
    autoValue() { 
     if (this.isInsert && (this.value == null || !this.value.length)) { 
     return '-'; 
     } 
     if (this.isUpdate && this.isSet && this.operator === '$unset') { 
     return { $set: '-' }; 
     } 
    }, 
    optional: true 
    } 

Ajouté: documentation utilisée pour écrire cette réponse (code fonctionne comme prévu, testé localement):

+0

merci encore une fois. Vous avez sauvé beaucoup de mon temps, c'était un cas très étroit que j'étais incapable de résoudre :) –

+0

@AnkurSoni Vous êtes les bienvenus :) La lecture des documents aide beaucoup;) – Styx

+0

pouvez-vous également pointer le lien et la ligne non de docs dans votre réponse? –