Когда в форме датаполе myStore.sync подвисает
По идее этот код всегда должен скрывать сообщение. Иными словами callback должен всегда вызываться.
myStore.sync({ callback: function() { Ext.Msg.hide(); } }); Но у меня проблема, когда в форме находится датаполе, то не работает. Песочница: https://fiddle.sencha.com/#fiddle/o8h В чем может быть проблема? |
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 |
Спасибо!
по поводу первого пункта: у меня конечно в реальном проекте не мемори. Но я не знаю что тут сделать, чтобы состряпать быстро пример (увидел теперь как у вас сделано - буду знать) по поводу третьего пункта - я и не знал, что ничего не будет вызвано в случае если не были внесены изменения в форму - спасибо, сейчас переделаю проект возможно ошибка пропадет!!! |
А можно строку
if (myStore.getModifiedRecords().length || myStore.getRemovedRecords().length) { заменить строкой if (form.isDirty()) { вроде как короче? хотя она не работает почему-то... для чего этот метод isDirty вообще нужен? |
form.isDirty проверяет только данную форму ..вносились ли зменения. Я сделал проверку есть ли в принципе чтото что не сохранено в сторе. Что использовать из логики приложения решать разработчику.
|
и почему она не работает тогда???
isDirty выдает все время true https://fiddle.sencha.com/#fiddle/o9m |
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) профит |
Ура, все заработало!
Спасибо! Про этот trackResetOnLoad читал, но не понял. Теперь осталось разобраться с условиями в bind-ах. В другой теме задал вопрос. |
Часовой пояс GMT +3, время: 17:08. |