2017-12-04 6 views
0

Ich habe ein Schema geschrieben, aber es scheint nicht zu validieren, wie ich erwartet hatte. Ich nehme an, dass etwas mit meiner Schemasyntax nicht stimmt, aber ich kann es nicht herausfinden. Ich erwarte, dass keine Fehlermeldungen für Titel oder Ziel angezeigt werden, bis die Spendenaktion abgeschlossen ist, da sie nur erforderlich sind, wenn die Spendenaktion abgeschlossen ist. Ich habe viele Kombinationen ausprobiert, aber keiner von ihnen funktioniert wie erwartet, diese beiden kommen mir am nächsten, was ich brauche.Ajv Schlüsselwörter und benutzerdefinierte Fehlermeldungen

Schema Versuch ein: zeigt 4 Fehlermeldungen, 3 erforderliche Fehler und 1 Fehler, der sagt, dass Daten "dann" Schema übereinstimmen sollten.

const schema = { 
    required: ['fundraiser'], 
    if: { 
    properties: { 
     fundraiser: { type: 'string' }, 
    }, 
    }, 
    then: { 
    required: ['title', 'target'], 
    }, 
    errorMessage: { 
    required: { 
     fundraiser: 'Please select an option', 
     title: 'Please enter a title', 
     target: 'Please enter a target', 
    }, 
    }, 
}; 

Schema Versuch zwei: zeigt zwei Fehlermeldungen, 1 erforderlich Fehler und 1 Fehlermeldung, Daten sollten „dann“ Schema übereinstimmen, was richtig ist, aber wenn ich dann komplett Fundraiser gültig wird wahr, was ist, wenn ich erwarten Dann sehen Sie die erforderlichen Fehler für Titel und Ziel. Auch keine Fehler haben meine benutzerdefinierten Fehlermeldungen definiert. mit AJV-Fehler

const scema = { 
    if: { 
    properties: { fundraiser: { minLength: 2 } }, 
    then: { required: ['title', 'target'] }, 
    }, 
    then: { required: ['fundraiser'] }, 
    errorMessage: { 
    required: { 
     fundraiser: 'Please select an option', 
     title: 'Please enter a title', 
     target: 'Please enter a target', 
    }, 
    }, 
}; 

Ich bin mir ziemlich sicher, dass ich etwas falsch mit meinem Schema tue, aber es ist aus der Dokumentation nicht klar, wie wenn/dann mit benutzerdefinierten Fehlermeldungen in Kombination zu verwenden. Jede Hilfe würde sehr geschätzt werden! Vielen Dank!

Antwort

1

Das Problem mit dem ersten Schema ist, dass Subschema innerhalb "if" gültig ist, sofern Fundraiser-Eigenschaft vorhanden ist und keine Zeichenfolge. Es würde wahrscheinlich so funktionieren, wie Sie es erwarten, wenn Sie type: 'object' zum Stammschema hinzufügen und required in das "if" Teilschema verschieben.

Das Problem mit dem zweiten Teilschema ist, dass die ersten „dann“ das hat keine „wenn“ im gleichen Schema-Objekt wird ignoriert (es sei denn, Sie AJV-Schlüsselwörter verwenden, die implementiert if/then/else anders etwas aus, wie es ist in Draft-07 der JSON-Schema-Spezifikation definiert) und das Subschema in "Wenn es gültig ist, auch wenn Fundraiser-Property nicht vorhanden ist und das zweite" dann "nur bestehen kann, wenn Fundraiser vorhanden ist.

Verwandte Themen