Вы можете определить свой собственный компонент, который будет использоваться в качестве виджета для размещения в столбце. dataIndex столбца виджета будет связываться с объектом с процентом каждого этапа (который должен добавить до 100%), который выглядит как
{
redPercent: 10,
orangePercent: 20,
bluePercent: 30,
greenPercent: 40
}
Затем вновь определенный компонент будет использовать TPL для отображения хода bar - используя CSS, чтобы правильно установить процентную ширину.
Ext.define('my.StatusBar', {
extend: 'Ext.container.Container',
xtype: 'my-status-bar',
defaultBindProperty: 'statusCounts',
config: {
statusCounts: null
},
updateStatusCounts: function (obj) {
this.getViewModel().set('statusCounts', obj);
},
viewModel: {
data: {
statusCounts: null
}
},
height: 25,
layout: {
type: 'hbox',
align: 'middle'
},
constructor: function (config) {
config.items = [
{
xtype: 'component',
flex: 1,
tpl: [
'<div style="width:100%; display:table;">',
' <tpl if="redPercent"><div style="width: {redPercent}%; display:table-cell; background-color:red;"></div></tpl>',
' <tpl if="orangePercent"><div style="width: {orangePercent}%; display:table-cell; background-color:orange;"></div></tpl>',
' <tpl if="bluePercent"> <div style="width: {bluePercent}%; display:table-cell; background-color:blue;"></div></tpl>',
' <tpl if="greenPercent"><div style="width: {greenPercent}%; display:table-cell; background-color:green;"></div></tpl>',
'</div>'
],
bind: '{statusCounts}'
}
];
this.callParent(arguments);
}
});
И, наконец, вы должны настроить колонки виджета как
{
xtype: 'widgetcolumn',
text: 'Progress',
dataIndex: 'statusCounts',
widget: {
xtype: 'my-status-bar'
}
}
вы можете использовать загрузочный штабелироваться прогресс бар [http://getbootstrap.com/components/#progress-stacked](http:// getbootstrap.com/components/#progress-stacked) –