Я копаю во что-то действительно интересное при объединении Extjs и D3.Extjs + D3: визуализировать конфликт
В общем, ExtJS отображает основной кадр для всей страницы и D3 для отображения динамического графика в определенном div в этом фрейме.
Поскольку логика рендеринга в Extjs довольно сложна, место, где я помещаю логику визуализации D3, кажется решающим.
Здесь я попробовал два:
1) введен в «» InitComponent
[ExtJS]
Ext.define('EDS.view.selector.Container', {
extend: 'Ext.panel.Panel',
alias : 'widget.selectorcontainer',
initComponent: function(){
renderSelectorOrgView();
}
}
[D3]
function renderSelectorOrgView(divId, divHeight, divWidth) {
var svg = d3.select("#" + divId).append("svg");
....
}
Проблема заключается в том, что она просто не работает, так как во время «InitComponent», то ДИВ не полностью генерироваться.
2) поместить в глобальную Ext.onReady()
Это оказалось, что D3 может выбрать только пустой результат. Я думаю, что причина аналогична 1)
3) положить в OnRender()
Логически это должно работать нормально. И на самом деле D3 может получить div и его attr отлично. Однако проблема заключается в том, что процесс визуализации ExtJS полностью разрушен этим кодом. Весь макет поврежден. Так что я пропускаю что-то важное в onRender()?
Ext.define('EDS.view.selector.Container', {
extend: 'Ext.panel.Panel',
alias : 'widget.selectorcontainer',
layout: 'fit',
onRender: function(){
//// Render D3
// Selector
console.log("onRender");
console.log(this.height);
console.log(this.width);
var divId = Ext.getCmp('selector-organization').id;
var divHeight = Ext.get(divId).getHeight();
var divWidth = Ext.get(divId).getWidth();
console.log(divHeight);
console.log(divWidth);
renderSelectorOrgView(divId, divHeight, divWidth);
},
}
Is 'boxready' уволен после того, как элемент DOM полностью отображен и не изменится при последующем рендеринге? – SolessChong
Компоненты Ext JS сначала отображаются в DOM, а затем выкладываются (назначенные размеры). Событие 'boxready' запускается после первого макета и запускается только один раз. После этого макет компонента (размеры) может измениться, но его разметка DOM обычно не работает. –