gpt4 book ai didi

ember.js - options.scales.yAxes[0].ticks.callback 没有在 ember-cli-chart 中动态更新

转载 作者:行者123 更新时间:2023-12-05 07:23:05 24 4
gpt4 key购买 nike

我在我的 hbs 文件中嵌入了 ember-cli-chart

<div class="chart">
{{ember-chart type='line' data=data options=options}}
</div>

在我的组件文件中,我创建了一个options 属性

options: computed('metric', function() {
let opts = defaultOptions;
if (this.metric === 'height') {
opts.scales.yAxes = [{
ticks: {
callback: function(value, index, values) {
// code to return labels
}
}
}]
} else {
opts.scales.yAxes = [{
ticks: {
callback: function(item, index, items) {
// code to return labels
}
}
}]
}

return opts;
});

我想根据当前选定的指标显示 Y 轴标签。第一次加载图表时,它会在 y 轴上呈现正确的标签,如果我更改指标,则会使用相同的回调而不是另一个回调(在 else 部分)并呈现相同的标签但具有更新的数据值。有人可以帮忙吗?

最佳答案

嗯,我不知道插件或 chart.js,但是在查看 ember-chart 的源代码时组件,我明白了

didUpdateAttrs() {
this._super(...arguments);
this.updateChart();
},

updateChart() {
let chart = this.get('chart');
let data = this.get('data');
let options = this.get('options');
let animate = this.get('animate');

if (chart) {
chart.config.data = data;
chart.config.options = options;
if (animate) {
chart.update();
} else {
chart.update(0);
}
}
}

因此,为了更新 chart.js,您需要触发 didUpdateAttrs,这意味着在您的情况下 options 本身需要改变。我不知道你是如何创建 defaultOptions 的,但假设这个引用永远不会改变,没有理由 didUpdateAttrs 会触发,因为你没有改变对 options (您只是在计算中更改 defaultOptions 的子 Prop )。我想:

import { assign } from '@ember/polyfills';
...
options: computed('metric', function() {
let opts = assign({}, defaultOptions);
if (this.metric === 'height') {
opts.scales.yAxes = [{
ticks: {
callback: function(value, index, values) {
// code to return labels
}
}
}]
} else {
opts.scales.yAxes = [{
ticks: {
callback: function(item, index, items) {
// code to return labels
}
}
}]
}

return opts;
})

足以触发您想要的行为,因为我们总是在重新计算 options 时返回一个新对象。

关于ember.js - options.scales.yAxes[0].ticks.callback 没有在 ember-cli-chart 中动态更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56232069/

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