Параллельный fx для нескольких элементов, имеющих один и тот же родительский контейнер в ExtJS - PullRequest
1 голос
/ 23 декабря 2010

У меня есть ExtJS GridPanel со связанными RowSelectionModel и GridView. Когда пользователь выбирает несколько строк и нажимает кнопку «Перейти», я бы хотел, чтобы все выбранные строки мигали несколько раз.

В настоящее время я делаю что-то вроде:

selModel.each(function (record) {

  var doEffect = function (effect, row, color, count, classToToggle) {

     var effectCallback = function (count, max) {
        if (count < max) {
            return (function () { row[effect](color); });
        }
        else {
           return (function () { row.addClass(classToToggle); });
        }
      };

      row.removeClass(classToToggle);
      for (var i = 1; i <= count; i++) {
         row[effect](color, { callback: effectCallback(i, count) });
       }
  };


  // highlight selected rows
  var row = Ext.get(grid.getView().getRow(grid.store.indexOf(record)));

  // essentially calling row.highlight() 3 times 
  doEffect('highlight', row, 'f8f7d6', 3, 'x-grid3-row-selected');  
}

Проблема в том, что с увеличением количества выбранных строк визуальный эффект больше не возникает одновременно. Я знаю, что вы можете указать одновременность в конфигурации эффектов, в результате чего все эффекты, помещенные в очередь для этого элемента, будут происходить одновременно, но поскольку все строки являются отдельными элементами, это не совсем работает.

Было бы замечательно, если бы я мог как-то указать параллелизм в родительском контейнере так, чтобы анимация не происходила, пока последняя выбранная строка не была готова к отправке.

Кто-нибудь сталкивался с подобными вещами раньше?

1 Ответ

0 голосов
/ 02 февраля 2011

Вы устанавливаете обратные вызовы (таймеры) для каждой строки по очереди, и поэтому они могут срабатывать в разное время.Попробуйте настроить один таймер и внести изменения во все выбранные строки одновременно.

То есть удалите цикл selModel.each () извне, и заставьте doEffect и effectCallback принять коллекцию строк (или отправьте запрос selModel самим) для изменения при каждом вызове.

Он также будет работать быстрее (т. е. потреблять меньше циклов), поскольку у вас будет работать только один таймер за раз.

...