2010-03-05 4 views
2

Я создал гармошку, как это:ExtJS: Отключить аккордеон анимации

layout:'accordion', 
layoutConfig:{ 
      animate:true 
} 

затем я добавить элементы путем дополнения() метод, а затем повторно вынести его с doLayout() и установите activeItem:

navigation_panel.getComponent(1).expand(false); 

Я вызываю метод expand() с параметром false, но он по-прежнему анимирует переход, поэтому он принимает параметр из основного макета и игнорирует, что я отправил для expand(). Как решить эту проблему?

ответ

5

Две вещи происходят, когда вы расширяете элемент в соответствии панели: 1. старый активный элемент разрушилась 2. Новый активный элемент расширяется

складыванию старого активного элемента обрабатывается аккордеона и происходит во время события «beforeexpand». Посмотрев исходный код, я вижу, что макет аккордеона вызывает var ai = this.activeItem; ai.collapse (this.animate)

Итак, анимация краха старого активного элемента полностью определяется свойством «анимировать» макета аккордеона. Флаг анимации, который вы проходите, игнорируется для этих целей. Я предполагаю, что если вы посмотрите внимательно, вы увидите, что ваш коллапс анимируется, а расширение - нет.

Поскольку ядро ​​animate передается явно, я не вижу стандартного поддерживаемого способа переопределить это поведение для одной операции.

В версии 3.0+ вы можете вызвать документированный метод getLayout() до или после рендеринга, чтобы получить ссылку на объект макета контейнера. Вы могли бы просто установить свойство анимации объекта макета на false, манипулируя панелью, а затем установите ее обратно, когда закончите. Это не документировано для работы, но, вероятно, будет основано на источнике.

+0

Благодарим вас за вашу идею. Он работает;) – Skay

+3

'animate: false' - это принятый способ отключить анимацию –

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