0

Ich arbeite in einem Projekt, in dem ein "Super Admin" Benutzer einen anderen Benutzer erstellen kann, indem er Benutzernamen und Passwörter setzt. Ich habe eine AutoForm quickForm Rendering ein Formular basierend auf der SimpleSchema an die Meteor.users Sammlung (mit Collection2). Nach der Collection2 docs Empfehlung über ein Schema der Benutzer Sammlung anbringen, sieht mein Schema wie folgt aus:SimpleSchema und AutoForm: Render-Passwort-Feld als einzelne Eingabe

Usuarios.schema = new SimpleSchema({ 
    ... 
    username: { 
     type: String, 
    }, 
    services: { 
     type: Object, 
     optional: true, 
     blackbox: true 
    }, 
    "services.password": { 
     type: String, 
     optional: true, 
     autoform: { 
     type: 'password' 
     } 
    }, 
    ... 
}); 

Das gerenderte Form sieht wie folgt aus: Rendered template

Aber ich möchte das Feld Kennwort gemacht haben wie der Benutzername (ohne das Bedienfeld Dienste). Ich habe keinen Workaround zu diesem gefunden. Ich muss die Attribute des Services-Objekttyps im Schema haben oder die Validierung beim Einfügen des Benutzers fehlschlägt (mit Accounts.createUser()), und so wird das Panel gerendert (wegen des Objekttyps des Attributs).

Irgendwelche Ideen, wie ich das gewünschte Template Rendering erreichen könnte?

Antwort

0

Ihr Passwort ist Teil des Objekts ‚Service‘, weshalb es automatisch in einem afObjectField gemacht wird, wenn Quickform oder quickFields mit:

afObjectField

Wenn Sie die afQuickField Komponente für eine Verwendung Feld, das ein Objekt ist, wird mit der Komponente afObjectField gerendert, außer Sie überschreiben den Typ oder geben Optionen an. Dies geschieht standardmäßig, wenn Sie eine quickForm für ein Schema verwenden, das ein Feld vom Typ Object hat.

Die afObjectField-Komponente gibt alle Unterfelder eines Objektfelds zusammen als eine Gruppe wieder. Die Gruppe ist mit dem Namen des Objektfeldes gekennzeichnet. Die tatsächliche visuelle Darstellung der Gruppe variiert basierend auf der von Ihnen verwendeten Motivvorlage. Für die Standardvorlage "bootstrap3" erscheint die Gruppe in einem Bereich mit einer Überschrift.

Lösung A: Anleitung Form Rendering

Um Ihr Passwort als ein einzelnes Feld zu machen, müssen Sie Ihre autForm manuell einrichten und verweisen auf die Felder von afFieldInput verwenden. Die Form mthen kann wie folgt aussehen (nicht getestet, aber Code aussehen sollte), um diese:

{{> autoForm id="login" schema=Usuarios.schema}} 
    {{> afFieldInput type="text" name="username"}} 
    {{> afFieldInput type="password" name="services.password"}} 
{{/autoForm}} 

was den Vorteil hat, dass Ihre Form genau aussieht, wie Sie wollen, aber den Nachteil hat, dass Sie alle Extras hinzufügen müssen (Validierung Nachrichten und Zeug) manuell.

Lösung B: Ändern Sie Ihr Schema

Wenn Sie das Kennwort aus der Dienstgruppe ziehen, dann werden Sie den gleichen Effekt haben, Auto-machen als mit Benutzername: ein einziges Eingabefeld.

Usuarios.schema = new SimpleSchema({ 
    ... 
    username: { 
     type: String, 
    }, 
    services: { 
     type: Object, 
     optional: true, 
     blackbox: true 
    }, 
    ... 
    password: { 
     type: String, 
     optional: true, 
     autoform: { 
     type: 'password' 
     } 
    }, 
    ... 
}); 
+0

Lösung B funktioniert! Aufgrund meiner Projektstruktur konnte ich Lösung A nicht verwenden. Danke. –

Verwandte Themen