2016-04-26 4 views
0

Guten Tag. Ich entwickle eine Webanwendung und möchte überprüfen, ob mein fieldSet schmutzig ist. Die erste Sache, die ich versuchte, war fieldSet.isDirty();, aber ich stieß bald auf einen Fehler, da die Funktion isDirty() nicht auf das fieldSet xType angewendet werden kann. Da ich immer noch eine elegante Lösung verwenden wollte, schrieb ich eine Überschreibung für das fieldSet. Mein Override sieht folgendermaßen aus:ExtJS - Überschreiben des FieldSet xType und Hinzufügen einer Funktion scheint nicht zu funktionieren?

Ext.define('myApp.override.form.FieldSet', { 
override: 'Ext.form.FieldSet', 

sampleOverride: function(){ 
    console.log("hi! sample override function entered"); 
}, 

checkForDirtyFields: function(){ 
    me = this; 
    return this.getFields().findBy(function(f){ 
     return f.isDirty(); 
    }); 
} 

});

Wie Sie sehen können, schrieb ich 2 Funktionen, eine als Beispiel, und die andere, für die Überprüfung von schmutzigen Feldern innerhalb der fieldSet. Beim Versuch, es in meinem Controller zu verwenden, wie:

fieldSet.checkForDirtyFields(); 
fieldSet.sampleOverride(); 

bin ich durch einen Fehler empfangen: Uncaught TypeError: fieldSet.sampleOverride is not a function

Am nun berechtigterweise verwirrt. Ich habe Überschreibungen für den Panel-XType geschrieben und kann sie wie vorgesehen verwenden (zum Löschen eines unreinen Status, zum Löschen der Felder in einem Formular usw.). Es scheint jedoch, dass ich keine Override-Funktion für das Fieldset erstellen kann.

Alle führen und Hilfe wird sehr geschätzt. Vielen Dank.

+0

Es gibt keinen Grund, der nicht funktionieren sollte. Stellen Sie einen Testfall zusammen. –

+0

Ich habe eine Arbeit gefunden. Ich werde bald meine Antwort posten. – Razgriz

Antwort

0

Sorry für enttäuschend. Ich habe eine Arbeit gefunden. Mein Problem war, dass ich mehr als einen Speicher hatte, dessen Daten in einem Formular angezeigt werden, getrennt durch fieldSets. Das Problem besteht darin, die Daten auf der Seite zu speichern und mithilfe von isDirty() zu überprüfen, ob Änderungen vorgenommen werden müssen. Die Überprüfung auf form.isDirty() würde True zurückgeben, selbst wenn das FieldSet für einen Speicher geändert wurde.

Was ich tat war, dass nach form.updateRecord(record);, ich überprüft mit record.isModified();, um zu sehen, ob es eine Änderung gibt, die begangen werden muss. Wenn es wahr zurückgibt, fahre ich mit meiner Store-Synchronisierung fort. Wenn es false zurückgibt, wurde der Datensatz nicht geändert und ich fahre mit meinem Code fort.

Wenn Sie wirklich einen Funktionsaufruf wünschen, empfehle ich, einen Controller zu erstellen, der ein fieldSet/fieldContainer übernimmt, die Elemente durchgeht und die Elemente überprüft, wenn eines davon false zurückgibt, wenn es mit dirty markiert ist.

Verwandte Themen