У меня есть немного более аккуратное решение, избегая необходимости вызова setTimeout
.
По сути, мой renderer
добавляет class
к ячейке, в которую я хочу пользовательский контент, затем я используюкомбинация listeners
для отображения пользовательского содержимого в эту ячейку после того, как сетка присутствует на странице.
renderer: function (value, metaData, record) {
metaData.tdCls = metaData.tdCls + ' customContentCell';
return '';
}
В сетке я добавляю слушателя afterrender
, который, в свою очередь, добавляет слушателя refresh
квид сетки.Мне бы хотелось использовать viewready или другое событие, но оно не работает в используемой версии ext, 4.0.2a.
listeners: {
afterrender: function (grid) {
var view = this.getView();
if (view)
view.on('refresh', gridRenderCustomContent, this);
}
}
В этой функции refresh
, которую я затем зацикливаючерез все записи и вывести содержимое в ячейку.Нечто подобное следующему, которое просто добавляет контейнер ext в ячейку, должно работать как основание.
var gridRenderCustomContent = function () {
var recordIdx, colEl, chart, record, ganttHolder;
for (recordIdx = 0; recordIdx < grid.store.getCount(); recordIdx++) {
record = grid.store.getAt(recordIdx);
holder = Ext.DomQuery.select('.customContentCell', grid.view.getNode(recordIdx));
if (holder.length) {
colEl = holder[0];
colEl.innerHTML = '';
var customContentContainer = new Ext.create('Ext.container.Container', {
style: 'height: 30px',
items:[ ... ],
renderTo: holder
});
}
}
};