gpt4 book ai didi

javascript - ExtJS 5 饼图不使用远程存储呈现

转载 作者:行者123 更新时间:2023-11-29 19:37:01 25 4
gpt4 key购买 nike

我在 ExtJS 5 中有一个基本饼图。我遇到的问题是图表使用静态 JsonStore 呈现,但不能使用远程 data.store 正确呈现?

这是我的代码:

查看(图表)

Ext.define('APP.view.core.graphs.Countytotals', {
extend: 'Ext.Panel',
alias: 'widget.countytotalchart',
id: 'countyTotalsGraph',

width: 650,

initComponent: function() {
var me = this;

// Doesn't work?
var countyStore = Ext.create('APP.store.Countytotalsgraph');


// Works
var store = Ext.create('Ext.data.JsonStore', {
fields: ['COUNTY', 'AMOUNT'],
data: [{
'COUNTY': 'London',
'AMOUNT': 10.92
}, {
'COUNTY': 'Lancashire',
'AMOUNT': 6.61
}, {
'COUNTY': 'Kent',
'AMOUNT': 5.26
}, {
'COUNTY': 'West Yorkshire',
'AMOUNT': 4.52
}, {
'COUNTY': 'Nottinghamshire',
'AMOUNT': 4.01
}, {
'COUNTY': 'Other',
'AMOUNT': 68.68
}]
});

var chart = new Ext.chart.PolarChart({
width: '100%',
height: 500,
insetPadding: 50,
innerPadding: 20,
legend: {
docked: 'bottom'
},
listeners: {
afterrender: function (chart) {
if (chart.isVisible()) {
countyStore.load();
chart.redraw();
}
}
},
interactions: ['itemhighlight'],
store: countyStore,
series: [{
type: 'pie',
angleField: 'AMOUNT',
label: {
field: 'COUNTY',
display: 'outside',
calloutLine: {
length: 60,
width: 3
// specifying 'color' is also possible here
}
},
highlight: true,
tooltip: {
trackMouse: true,
renderer: function(storeItem, item) {
this.setHtml(storeItem.get('COUNTY') + ': ' + storeItem.get('AMOUNT') + '%');
}
}
}]
});


me.items = [chart];

this.callParent();
}
});

商店

Ext.define('APP.store.Countytotalsgraph', {
extend: 'Ext.data.Store',
model: 'APP.model.Countytotalsgraph',
autoLoad: false,
storeId: 'countyTotalsGraphStore',

proxy: {
type: 'ajax',
url : '/dashboard/countytotals',
method : 'POST',
reader: {
type: 'json',
rootProperty: 'data'
}
},

listeners: {
beforeload: function(store, eOpts) {
//if ( this.data.items.length ) {
//Ext.getCmp('optionsGrid').getView().refresh();
//}
store.proxy.extraParams = {
percentage: 'true'
}
}
}
});

型号

Ext.define('APP.model.Countytotalsgraph', {
extend: 'Ext.data.Model',
fields: ['COUNTY', 'AMOUNT']
});

这是使用静态存储呈现的方式:

With Static JsonStore

这是使用远程存储呈现的方式:

With remote Data.Store

虽然图表是使用 Sencha CMD 和 sencha-charts 目录中的“sencha ant build”命令构建的,但我使用的是最新版本的 GPL。

为什么静态商店显示它(关于底部的图例仍然存在问题)但远程 json 不显示它?

我尝试在图表呈现并可见后加载商店,因为我之前看到一篇关于推迟加载商店以使图表有时间呈现的帖子,但这没有用:

listeners: {
afterrender: function (chart) {
if (chart.isVisible()) {
countyStore.load();
chart.redraw();
}
}
},

提前致谢:)

内森

最佳答案

可能是 Ext 中的错误。

图表颜色在 Ext.chart.AbstractChart#updateColors 中设置.这是一个“配置”方法,在调用 setColors 时会自动调用,在初始化配置时也会从构造函数中调用。

在您的情况下,它仅在构造时调用,在远程存储加载之前;碰巧 Polar 系列需要知道商店中的记录数量,以便知道它必须使用多少种颜色(不像其他类型的图表依赖轴数左右)。

这是该方法的代码:

updateColors: function (newColors) {
var me = this,
colors = newColors || (me.themeAttrs && me.themeAttrs.colors),
colorIndex = 0, colorCount = colors.length, i,
series = me.getSeries(),
seriesCount = series && series.length,
seriesItem, seriesColors, seriesColorCount;

if (colorCount) {
for (i = 0; i < seriesCount; i++) {
seriesItem = series[i];

// Ext.chart.series.Polar#themeColorCount uses store.getCount()
// so seriesColorCount will be 0
seriesColorCount = seriesItem.themeColorCount();

// ... hence seriesColor will be an empty array
seriesColors = me.circularCopyArray(colors, colorIndex, seriesColorCount);
colorIndex += seriesColorCount;
seriesItem.updateChartColors(seriesColors);
}
}
me.refreshLegendStore();
}

您可能可以通过在商店的加载事件之后创建图表来使其正常工作,但考虑到您的使用是按预期进行的,这有点古怪,并且该错误可能会在即将发布的版本中得到解决。

目前,一个可能的解决方法是重写图表的 onRefresh,当商店刷新时调用,并在此时强制更新颜色:

Ext.define(null, {
override: 'Ext.chart.PolarChart'
,onRefresh: function() {
this.callParent(arguments);
var colors = this.getColors();
if (colors) {
this.updateColors(colors);
}
}
});

关于javascript - ExtJS 5 饼图不使用远程存储呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24889632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com