我在ember组件中实现了一个highchart,方法如下
/controllers/mycontroller.js
export default Controller.extend({
chartData:
[{
name: 'Impact',
borderWidth: 2,
borderColor: '#FFFFFF',
data: [],
keys: ['x', 'y', 'v','f', 'i', 'm', 'c', 'g', 'p'],
dataLabels: {
enabled: true,
color: '#000000',
style:{
fontSize: 14,
fontFamily: 'arial',
textOutline: false
},
formatter: function(){
return this.point.options.feature;
}
}
}],
chartOptions: computed(function() {
return {
chart: {
renderTo: 'container',
type: 'mymap',
events: {
load: requestData, -----> function that makes an api call and formats data
redraw: true
}
我已经启用了重绘选项,但它没有重绘,因为加载数据只发生在组件第一次加载时(在URL上),我想?
因此,我的问题是,当通过函数调用获取数据时,如何每60秒自动加载/重绘数据?
1条答案
按热度按时间jv4diomz1#
我想您的模板中有类似
{{high-charts content=chartData chartOptions=chartOptions}}
的内容(或者更现代的语法<HighCharts @content={{chartData}} @chartOptions={{chartOptions}}>
)?当
chartData
或chartOptions
发生变化时,显示的图表应该自动更新。chartData
和chartOptions
(如有必要),然后执行this.setProperties({ chartData, chartOptions });
chartData
和chartOptions
成为正确的计算属性。如果你只定义了computed(function() ...
而没有依赖键,ember将不会重新计算,因为没有任何东西可以触发重新计算。例如,如果你的数据请求方法更改了一个名为rawData
的控制器/组件(不是同一个概念,顺便说一句!)属性,你的计算属性应该依赖于:chartData: computed('rawData', function() { ... },
.要每60秒重新加载一次数据,只需
import { later } from '@ember/runloop';
并在数据加载函数自身的函数体末尾再次调度数据加载函数: