17 Stimmen

Auslösen der backbone.js-Änderung, wenn sich der Wert nicht ändert

Es ist eine bekannte Funktion von backbone.js, dass, wenn Sie Daten setzen, die sich nicht geändert haben, das Änderungsereignis nicht ausgelöst wird und auch keine Validierungen durchgeführt werden. Ich benötige jedoch das Auslösen des Änderungsereignisses, da ich eine JSON-Antwort von einem AJAX-Aufruf speichere, die Ergebnisse der Backend-Validierung speichert. Wenn der Benutzer das Formular weiterhin sendet, während er dasselbe Feld leer lässt, wird die Backend-Validierung dieselbe JSON-Antwort zurückgeben und wenn ich sie im Modell speichere, wird das Änderungsereignis nicht ausgelöst.

Ein paar Dinge, die ich im success-Callback des AJAX ausprobiert habe, wo ich die Daten in das Modell setze:

Versuchte Lösung #1

t.model.unset('fieldErrors',{silent: true});
t.model.set({fieldErrors: JSONResponse});

Versuchte Lösung #2

t.model.set({fieldErrors: null},{silent: true});
t.model.set({fieldErrors: JSONResponse});

Keines dieser Ergebnisse führt dazu, dass das Änderungsereignis ein zweites Mal ausgelöst wird, wenn der Aufruf erfolgt und der Benutzer dieselbe JSON-Antwort hat.

26voto

Scott Puleo Punkte 3684

Auslösen des Änderungsereignisses manuell:

t.model.trigger('change', t.model);

oder

t.model.trigger('change:fieldErrors', t.model, newFieldErrorsValue);

0voto

Noam Rones Punkte 13
this.model.set({fieldErrors: JSONResponse}, {silent:true});
this.model.trigger('change:fieldErrors');

siehe dieses Gespräch:

Kann ich ein Update eines Attributs eines Modells erzwingen, damit es als Änderung registriert wird, auch wenn es nicht ist?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X