2013-02-26 6 views
8

У меня есть Ext.form.Panel внутри Ext.window. Высота формы больше, чем высота окна, поэтому у меня есть вертикальная прокрутка по окну.Избегайте прокрутки версии Ext.form наверх

Проверка правильности полей формы (по событию validitychange) прокручивает вверх.

Как избежать такого поведения?

ответ

1

У меня такая же проблема :(

я сделал жуткую обходной путь (он работает до 80%) Иногда он все еще прыгает на вершину. Вы должны знать, что у меня есть окно с компоновкой " form '. Если у вас есть окно с (например) макетом' fit 'с типом формы' form ', вам может понадобиться немного изменить код. Например, строка el.child (". х окна тела», fasle) не будет работать.

init: function() {    
    this.control({ 

      ... 

     /** My Ext.window.Window is called reservationwindow **/ 
     'reservationwindow': { 
      afterrender: function(comp) { 
       // comp is this Ext.Component == wrapper 
       var el = comp.getEl(); 
       //extjs adds the scrollbar to the body element... 
       var elForm = el.child(".x-window-body", false); 
       // or el.child(".x-panel-body", false); 

       //we are listinig to the scroll-event now 
       this.myFormEl = elForm; 
        this.safeScroll = {top:0, left:0}; 
       elForm.on('scroll', function() { 
        console.log("save"); 

        this.safeScroll = this.myFormEl.getScroll(); 
       }, this); 
       elForm.on('click', function() { 
        var resWin = this.getResWin(); 
        resWin.scrollBy(0,this.safeScroll.top,false); 
        console.log("reset"); 
       }, this); 
       elForm.on('keyup', function() { 
        var resWin = this.getResWin(); 
        resWin.scrollBy(0, this.safeScroll.top, false); 
        console.log("reset"); 
       }, this); 
      } 

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

Итак ... Как я уже сказал, это жуткое обходное решение. Если вы найдете лучшее решение, сообщите мне.

EDIT

Я также выяснил, что растут вариант на textareafield был один из нарушителей спокойствия.

{ 
    id: this.id + '-details', 
    xtype: 'textareafield', 
// grow: true,  now it isn't jumping 
    name: 'message', 
    fieldLabel: 'Zusätzliche Informationen', 
    labelAlign: 'top', 
    renderder: 'htmlEncode', 
    disabled: isDisabled, 
    anchor: '100%' 
} 
2

Я попытался выяснить, почему одна из моих форм прокручивалась вверх, а другая - нет. Оказалось, что я забыл явно указать диспетчер компоновки, а менеджер компоновки по умолчанию (якорь) прокручивается вверх по изменению действительности, а макет vbox - нет. Хотя все выглядело точно так же (vbox с align: 'stretch'), он вел себя по-другому, когда ошибка была либо показана, либо скрыта.

+0

спасибо, он работает для меня. Просто измените макет на «vbox». – wengeezhang