Korekta
Istnieje właściwość dostępna która zmienia oryginalną wartość, gdy wartość gotowi.
trackResetOnLoad: true
Zobacz ten JSFiddle
Starego odpowiedź poniżej można rzucić niewygodne, ale niech on niezmieniony
pierwsze muszę powiedzieć, że będziesz nie znajdzie takiej metody.
A to dlatego, że forma nie ma takiego stanu, pola go mają. Wszystko, co robi formularz, polega na iteracji po każdym polu i sprawdzeniu, czy jest brudny. Jeśli jakiekolwiek pole jest brudne, zostanie sprawdzone, czy ta wartość (brudny znak) zmieniła się od czasu ostatniego sprawdzenia, a jeśli tak, to zdarzenie dirtychange
jest uruchamiane. Wtedy to zostaną zapisane jako ostatni check (wasDirty
)
Teraz spójrzmy na polach bo oni naprawdę wyzwolić go:
Sprawdzają onChange
i onReset
jeśli pole jest brudny sprawdzając !me.isEqual(me.getValue(), me.originalValue)
gdzie originalValue
jest wartość, która została ustawiona na godzinę initValue
została wywołana.
Teraz co zrobić, aby „ustawić” Formularz nie jest już „brudny”
iteracyjne nad wszystkie pola formularza za pomocą getFields()
na Ext.form.Basic
teraz będziemy ustawić aktualną wartość jako pierwotnej wartości (Reset teraz zresetuj do tej wartości), wywołując initValue
na każdym polu i to wszystko.
niewłaściwy kod usuwa
Edit
Dobrze I zostały zmodyfikowane mój ostatni kod z wyżej
var items = form.getForm().getFields().items,
i = 0,
len = items.length;
for(; i < len; i++) {
var c = items[i];
if(c.mixins && c.mixins.field && typeof c.mixins.field['initValue'] == 'function') {
c.mixins.field.initValue.apply(c);
c.wasDirty = false;
}
}
i rozwidlony na working example. Przycisk pozostanie nieaktywny do czasu wykrycia jakichkolwiek zmian i ponownie się wyłączy, jeśli usuniesz zmiany. Baw się z tym, myślę, że właśnie tego szukasz.
Wygląda na to, że 'Ext.Form.Field' nie ma również metody' setDirty() '. –
Zobacz zaktualizowane pytanie –
@ s.webbandit Zobacz moją zaktualizowaną odpowiedź – sra