jquery - Extjs 与 Devexpress ChartJS

标签 jquery extjs devexpress chart.js

我想将 Devexpress 中的 dxChart 嵌入到 extjs 面板中...

这是我的基本尝试:

           var chart = $('#chartContainer').dxChart({
                                 size:{height:200,height:200},
                                 commonSeriesSettings: {
                                     label: {
                                         visible: true
                                     }
                                 },
                                 series: [{
                                     data: [
                                         { arg: 0, val: 1 },
                                         { arg: 2, val: 4 },
                                         { arg: 4, val: 2 }]
                                 }, {
                                     data: [
                                         { arg: 1, val: 1 },
                                         { arg: 2.5, val: 9 },
                                         { arg: 3.7, val: 5.6 }]
                                 }]
                             });

var panelChart = new Ext.Panel({
 items: [{
  contentEl: 'chartContainer',
  border: false,
  layout: 'fit'
 }]
});

<body>
 <div id="chartContainer" style="width: 100%; height: 100%"></div>
</body>

如果我从正文中删除 div,图表不会出现在面板中:(

但是这样它不会随窗口大小改变图表大小。我不想在正文中声明 div。

有什么想法吗?我会像 Highcharts for Extjs 一样使用它。这可能吗?

提前致谢:)

最佳答案

使用面板的 html 属性在面板主体中呈现您的 div。在面板的 afterrender 事件中创建图表,以便 div 可用。最后,当面板大小调整时,使用 resize 事件调整 div 的大小。

参见this other answer 。图表库不同,但原理完全相同。

编辑

我无法调整图表的高度。由于我对lib一无所知,所以我只是引用了这个support question ...但我认为这是您正在使用的图表类型的正常行为。

无论如何,这是我的代码(也在 fiddle 中):

Ext.define('DxChartPanel', {
    extend: 'Ext.Panel'

    ,resizable: true

    ,html: '<div class="chartContainer" style="width: 100%; height: 100%"></div>'

    ,initComponent: function() {
        this.callParent(arguments);
        this.on({
            scope: this
            ,resize: function(panel) {
                var ct = panel.body.down('.chartContainer'),
                    chart = $(ct.dom).dxChart('instance');

                ct.setSize(panel.body.getSize());

                chart._render({ animate: false })
                // Animated resize
                //chart._render();
            }
            ,afterrender: function(panel) {
                var el = this.body,
                    target = el.down('.chartContainer');
                target.setSize(el.getSize());
                this.createChart($(target.dom));
            }
        });
    }

    ,createChart: function(target) {
        var c = target.dxChart({
            size:{height:200,height:300},
            commonSeriesSettings: {
                label: {
                    visible: true
                }
            },
            series: [{
                data: [
                    { arg: 0, val: 1 },
                    { arg: 2, val: 4 },
                    { arg: 4, val: 2 }]
            }, {
                data: [
                    { arg: 1, val: 1 },
                    { arg: 2.5, val: 9 },
                    { arg: 3.7, val: 5.6 }]
            }]
        });
    }
});

Ext.create('DxChartPanel', {
    renderTo: Ext.getBody()
    ,title: "Resizable Panel"
    ,height: 300
    ,width: 300
});

Ext.widget('window', {
    autoShow: true
    ,title: "dxChart Window"
    ,width: 350
    ,height: 350
    ,layout: 'fit'
    ,items: [Ext.create('DxChartPanel', {
        border: false
    })]
});

关于jquery - Extjs 与 Devexpress ChartJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17945445/

相关文章:

php - 在 PHP 和 MySQL 中使用 Flot jquery 插件

javascript - JQuery UI 自动完成 : . 数据(...)未定义 [但仅当我添加第二个自动完成框时]

c# - 如何检查 DevExpress CheckEdit 中的多行

javascript - 是queryMode : 'local' optional when working with a ComboBox and a local store ?

javascript - Sencha : Two lists showing different content from the same store. 可能吗?

javascript - 从 iframe 中访问父 DevExpress 弹出窗口

wpf - 如何更改数据在 WPF GridControl 中的显示方式?

jquery - 使用 jQuery 突出显示复选框和单选按钮。

javascript - 保存时将值返回到 BackBone.js

json - 使用ajax发送分组的json数据