2016-11-13 4 views
0

Ich habe es geschafft, die Eingabe zu meinem Server gehen, und der Server reagiert, wenn die Eingabe gültig ist, oder ein Fehlerobjekt zurückgegeben, wenn nicht.Emberjs live serverside Validierung

Ich bin nur nicht sicher, wie Sie das zurückgegebene Fehlerobjekt verwenden, um tatsächlich etwas zu tun. Es gibt viele Beispiele im Internet, wie man das Fehlerobjekt durchläuft und die Nachricht anzeigt, aber das ist nicht genau das, wonach ich suche.

Ich habe eine Form Komponente, die eine Reihe von Feldern hat, die wie folgt aussehen:

{{input type="text" value=account.twitterId class="input" focus-out="validateInput"}} 

und ValidateInput in der Komponente sieht aus wie

validateInput() { 
    let account = get(this, 'account'); 

    account.save().then(() => { 
    console.log('success!'); // add class to the input field 
    }).catch((adapterError) => { 
    console.log(account.get('errors')); // add different class to the input field 
    console.log(adapterError); 
    }); 
}, 

Wie oben erwähnt, löst dies und liefert entweder erfolgreich oder Fehlermeldung

Aber wie nehme ich das Ergebnis und verwende es, um Klassen zum Klassenschlüssel des Eingabefeldes hinzuzufügen?

Ich habe versucht, mit den folgenden

hasError: false, 

    actions: { 

    validateInput() { 
    let account = get(this, 'account'); 

    account.save().then(() => { 
     set(this, 'hasError', false); 
    }).catch((adapterError) => { 
     set(this, 'hasError', true); 
    }); 
    }, 

}

Und dann if-Anweisung in der Front, die Art gearbeitet, aber wieder Auslöser nicht, wenn der Benutzer für eine die Eingabe ändert zweites Mal.

Soll ich eine berechnete Eigenschaft dafür verwenden? Wenn ja, wie würde man aussehen?

Antwort

2

Ihr Plan sollte funktionieren. Ich habe einen Ember Twiddle erstellt, den du als Referenz verwenden kannst. Ich habe das Modell ein wenig optimiert, um zufällige Erfolgs-/Misserfolg-Versprechungen zu ermöglichen, die von einer save()-Methode zurückkommen, aber der Rest ist ziemlich identisch mit dem, was Sie gepostet haben. Öffnen Sie Ihre Konsole, während Sie aus dem Twiddle herausschauen, um das Ergebnis des Versprechens zu sehen, das zurückgegeben wird. Ich verwende eine Vorlage wie Sie es empfohlen haben, um dem Benutzer Feedback zu geben.

https://ember-twiddle.com/3398d28381a4c0afb71cb5d59f271e36

Lassen Sie mich wissen, wenn Sie Fragen zwischen der Implementierung haben und was ich in der twiddle haben. ✌

+0

Vielen Dank für die Bestätigung, dass es funktionieren sollte, und es funktioniert in der Tat wie erwartet. Frage obwohl; Wie würde ich es für mehrere Felder wiederverwendbar machen? Offensichtlich bedeutet eine einzige Variable, dass alle Felder gleich funktionieren, unabhängig davon, welches Feld gerade bearbeitet wird ... –

+0

Aktualisiert Twiddle, war das, wonach du gesucht hast? Im Grunde genommen handelt es sich um eine Komponente, die "speicherbar" ist (alles mit einer Speichermethode, die ein Versprechen zurückgibt, dh: jedes der Glutendatenmodelle). Sie können das gleiche Konto an beide weitergeben, und beide validieren basierend auf ihren unabhängigen Antworten (öffnen Sie die Konsole, um das Ergebnis zu sehen). Beachten Sie jedoch, dass das Senden aller dieser Netzwerkanforderungen zu übermäßigen Netzwerk-Round-Trips führen kann (und wenn diese voneinander abhängig sind, wird es haarig). Das Vermeiden einer Rundreise mit etwas wie "ember-cp-validations" für "In-App" -Validierungen könnte eine Option sein. –