2014-01-24 3 views
1

Я хотел бы достичь this в ExtJS 4.2:ExtJS: 'рядом с центром'

enter image description here

например центрированная кнопка, с чем-то (индикатор прогресса) справа, что не приводит к перемещению кнопки.

Все мои макеты в настоящее время относительны, в основном с использованием HBox & VBox, и я хотел бы сохранить его таким образом, а не использовать что-либо абсолютно для решения этой проблемы.

Возможно, есть много способов сделать это, но многие из них будут ужасными. Я предполагаю, что атрибут «плавающий» может играть определенную роль, но я не могу это полностью исправить.

Любые предложения?

+0

вы хотите ширину прогресс бар динамически, но я не понимаю своей цели. Например, что такое ширина панели? это также динамический зависит от размера окна? –

+0

Да. Все динамическое и масштабируемое, кроме полей и отступов. –

ответ

1

Используйте pack конфигурации Формуляра HBOX для отображения элементов в центре, и применить margin равную ширину прогрессбара бара на левую сторону кнопки:

{ 
    layout: { 
     type: 'hbox', 
     pack: 'center' 
    }, 

    items: [{ 
     xtype: 'button', 
     text: 'Push me', 
     width: 100, 
     margin: '0 0 0 100' // margin-left equal to the width of the progress bar 
    },{ 
     xtype: 'progressbar', 
     width: 100 
    }] 
} 

проверить Также из this fiddle.

+0

Мне это нравится, но в идеале это немного более динамично. Есть ли подходящий момент для динамического получения ширины полосы выполнения? Я попытался сделать это в своем событии afterRender, но все равно был равен нулю. Я полагаю, что скрипка должна иметь PB в большем, чем требуется, контейнере с фиксированной шириной, выровненном влево. –

+0

Это работает для меня с afterrender (я обновил свою [скрипку] (https://fiddle.sencha.com/#fiddle/2ua) соответственно). – matt

+0

afterRender в родительском контейнере, а не в индикаторе выполнения, похоже, сделал это. Благодаря! –

1

Вот моя попытка, дайте мне знать, если это проблема.

Ext.onReady(function() { 
var ct = new Ext.panel.Panel({ 
    width: '100%', 
    renderTo: Ext.getBody(), 
    margin: 10, 
    border: true, 
    id: 'ppanel',   
    layout: { 
     type: 'hbox', 
    }, 

    items: [{ 
     xtype: 'button', 
     text: 'Push me', 
     width: 100, 
     id: 'bbutton' 
    },{ 
     xtype: 'progressbar', 
     width: 100, 
     id: 'pbar' 
    }], 
    listeners: { 
     afterrender: function() { 
      pwidth = Ext.getCmp('ppanel').getWidth(); 
      bwidth = Ext.getCmp('bbutton').getWidth(); 
      button = Ext.getCmp('bbutton'); 
      progrs = Ext.getCmp('pbar'); 
      bmargin = (pwidth/2 - bwidth/2); 
      button.setMargin("0 0 0 "+bmargin); 
      progrs.setMargin("0 0 0 10"); 
     } 
    } 
}); 
}); 
Смежные вопросы