Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Когда в форме датаполе myStore.sync подвисает (https://javascript.ru/forum/extjs/56295-kogda-v-forme-datapole-mystore-sync-podvisaet.html)

khusamov 09.06.2015 00:12

Когда в форме датаполе myStore.sync подвисает
 
По идее этот код всегда должен скрывать сообщение. Иными словами callback должен всегда вызываться.

myStore.sync({
     callback: function() {
           Ext.Msg.hide();
     }
});


Но у меня проблема, когда в форме находится датаполе, то не работает.

Песочница: https://fiddle.sencha.com/#fiddle/o8h

В чем может быть проблема?

siber-biber 09.06.2015 06:57

1) callback не будет работать с memory proxy. Не предполагается там никаких callbacks. Это термин из мира AJAX.
2) вы делаете sync не изменив стор. В форме данные поменялись допустим, но эти изменения надо положить в стор. То есть вначале дулаем loadRecord чтоб показать запись в форме а по завершении надо сделать updateRecord: http://docs.sencha.com/extjs/5.1/5.1...d-updateRecord
3) вы всегда показываете message хотя реального sync может и не произойти если пользователь ничего не поменял в форме. И тогда тоже никаких callback не вызовется. Это надо проверять..

Вот мой форк: https://fiddle.sencha.com/#fiddle/o95

khusamov 09.06.2015 12:56

Спасибо!
по поводу первого пункта: у меня конечно в реальном проекте не мемори. Но я не знаю что тут сделать, чтобы состряпать быстро пример (увидел теперь как у вас сделано - буду знать)

по поводу третьего пункта - я и не знал, что ничего не будет вызвано в случае если не были внесены изменения в форму - спасибо, сейчас переделаю проект возможно ошибка пропадет!!!

khusamov 09.06.2015 13:08

А можно строку

if (myStore.getModifiedRecords().length || myStore.getRemovedRecords().length) {


заменить строкой

if (form.isDirty()) {


вроде как короче?

хотя она не работает почему-то... для чего этот метод isDirty вообще нужен?

siber-biber 09.06.2015 13:28

form.isDirty проверяет только данную форму ..вносились ли зменения. Я сделал проверку есть ли в принципе чтото что не сохранено в сторе. Что использовать из логики приложения решать разработчику.

khusamov 09.06.2015 13:37

и почему она не работает тогда???

isDirty выдает все время true https://fiddle.sencha.com/#fiddle/o9m

siber-biber 09.06.2015 16:54

1) идем в описание isDirty: http://docs.sencha.com/extjs/5.1/5.1...method-isDirty
2) читаем, видим что после loadRecord форма либо делается dirty, либо нет в зависимости от конфига trackResetOnLoad: http://docs.sencha.com/extjs/5.1/5.1...ackResetOnLoad
3) меняем форму соответственно:
form = Ext.create('Ext.form.Panel', {
            trackResetOnLoad : true,
            ...

4) профит

khusamov 10.06.2015 15:30

Ура, все заработало!

Спасибо! Про этот trackResetOnLoad читал, но не понял.

Теперь осталось разобраться с условиями в bind-ах. В другой теме задал вопрос.


Часовой пояс GMT +3, время: 17:08.