2009-12-02 2 views
1

У меня есть проблемы, связанные с стрельбой и удалением событий в правильном порядке хроники. ниже код дает следующий результат:Условия проведения соревнований в гоночной трассе в AS3

  • сохранить плакат в БД, и событие отправки
  • вызова службы, диспетчерская событие удаляется = ложная служба
  • вызова, отправки события удалены = ложь
  • вызова службы, отправка событие удаляется = истина
  • сохранить плакат в БД, и событие отправки
  • сохранить плакат в БД, и событие отправки

это, конечно, должно быть больше что-то вроде:

  • экономии плаката в БД, и событие отправки
  • вызова службы, диспетчерская событие удаляется = истина
  • сохранить плакат в БД, и событие отправки
  • вызов службы, отправка событие удалено = истинно
  • сохранить плакат в db, а также событие отправки
  • вызов службы, отправка событие удален = true

Может кто-нибудь мне помочь? У меня заканчиваются идеи о том, как справиться с этим.

thx!

for(var i:int = 0;i< 3;i++){ 
     createPoster();   
    } 

    function createPoster(){ 
     Main.db.savePoster(); 
     Main.db.addEventListener(Config.evt_SAVEPOSTER_READY, callService); 
    } 

    function callService(){ 
     Main.db.removeEventListener(Config.evt_SAVEPOSTER_READY, callService); 
    } 

ответ

0

Вы проверили, что происходит, когда вы проходите только один элемент? Кажется, вы не выполняете очередную процедуру.

Возможно, вы захотите добавить прослушиватель событий к объекту Main.db только один раз и удалить его, когда вы успешно сохранили все свои «плакаты».

+0

Эй, спасибо за ответ. Да, я сделал, нет проблем, когда цикл один раз. Я поставил таймер в for-loop, и если я запускаю createPoster каждые 1000 миллисекунд, тогда проблем нет. Похоже, что for-loop будет быстрым, чтобы событие могло быть удалено. – 2009-12-02 20:21:16

+0

Добавление задержки для решения проблемы является слабой стратегией. Я могу опубликовать некоторый пример кода позже, чтобы объяснить мою мысль выше. – Rey

+0

Код bhups выше выполнит эту работу. Я вышел. – Rey

1

Проблема в том, что вы регистрируете ту же функцию callService за то же самое событие Config.evt_SAVEPOSTER_READY на одном EvenDispatcher объект db. Итак, как только сначала savePoster отправляет событие после успешного сохранения плаката, db получает событие, и три eventHandlers (в данном случае callService) вызываются, потому что callService регистрируется трижды. Таким образом, одно решение будет отправлять события с плаката.

for(var i:int = 0;i< 3;i++){ 
    createPoster(); 
} 
function createPoster(){ 
    poster = Main.db.savePoster(); 
    poster.addEventListener(Config.evt_SAVEPOSTER_READY, callService); 
} 
function callService(e:PosterEvent){ 
    e.target.removeEventListener(Config.evt_SAVEPOSTER_READY, callService); 
}

+0

hmmm хорошо пункт. Я реализую его и вернусь к нему. Thx для полезного ответа! – 2009-12-02 21:13:16

0

Является ли вызов db (Main.db.savePoster();) синхронным - он возвращается только после того, как действие завершено? Поскольку вы вызываете addEventListener после вызова db, прослушиватель событий (для первой итерации как минимум) не будет вызываться, если db-вызов является синхронным.

Является ли Main.db тем же экземпляром во всех трех итерациях? Если это так, вам не нужно регистрировать один и тот же прослушиватель событий три раза для него - один раз будет достаточно. Вызовите addEventListener перед запуском for-loop. Храните счетчик для отслеживания количества вызовов в callService и вызывайте removeEventListener после того, как счетчик встретит количество циклов (в этом случае 3).

 Смежные вопросы

  • Нет связанных вопросов^_^