knockoutjs highcharts 解析数据数组以绘制图表

发布于 2025-01-05 11:45:29 字数 1530 浏览 0 评论 0原文

我使用 highcharts 和 knockoutjs 的组合将数据输入到我的图表中。

我有 4 个海量数据数组,需要在点击事件时将其输入到我的高图表中。由于数据数组巨大,我在这里显示了空数据数组。目前它返回一个错误,例如: Uncaught TypeError: Cannot read property 'metric' of undefined

我的问题是如何访问 Areas.metric.data 并将其解析到我的图表中?

这是我的(非)工作小提琴: http://jsfiddle.net/whiteb0x/BG8Qe/18/

function MetricsViewModel(areas) {
    var self = this;
    self.areas = [ // data structure
        {
            name: 'Game',
            metrics: [{name : 'metric1', id : 'usdeur', data : []}, {name : 'metric2', id : 'msft', data : []}]
        },    
        {
            name: 'Player',
            metrics: [{name : 'metric1', id : 'msft', data : []}, {name : 'metric2', id : 'msft', data : []}]
        },
        {
            name: 'Social',
            metrics: [{name : 'metric1', id : 'googl', data : [] }, {name : 'metric2', id : 'msft', data : []}]
        }        
    ];


    series: [{ // default series
        id: 'adbe',
        data: ADBE
    }]
    }, function(chart){
        var data = areas.metric.data; // corresponds to my object above ^^^

    self.updateChart = function(metric) {
        var id = this.id,
            series = chart.get(id);
        if(!series){
            chart.addSeries({
                id: id,
                data: data
            });  
        } else {          
            series.remove();
        }                
        console.log(metric);
    }
});  

I am using a combination of highcharts and knockoutjs to feed data into my chart.

I have 4 massive arrays of data that need to be fed into my highchart upon a click event. I showed the data arrays empty here due to their huge size. Currently it returns an error like: Uncaught TypeError: Cannot read property 'metric' of undefined

My question is how do I access the areas.metric.data and parse it into my chart?

here is my (non) working fiddle:
http://jsfiddle.net/whiteb0x/BG8Qe/18/

function MetricsViewModel(areas) {
    var self = this;
    self.areas = [ // data structure
        {
            name: 'Game',
            metrics: [{name : 'metric1', id : 'usdeur', data : []}, {name : 'metric2', id : 'msft', data : []}]
        },    
        {
            name: 'Player',
            metrics: [{name : 'metric1', id : 'msft', data : []}, {name : 'metric2', id : 'msft', data : []}]
        },
        {
            name: 'Social',
            metrics: [{name : 'metric1', id : 'googl', data : [] }, {name : 'metric2', id : 'msft', data : []}]
        }        
    ];


    series: [{ // default series
        id: 'adbe',
        data: ADBE
    }]
    }, function(chart){
        var data = areas.metric.data; // corresponds to my object above ^^^

    self.updateChart = function(metric) {
        var id = this.id,
            series = chart.get(id);
        if(!series){
            chart.addSeries({
                id: id,
                data: data
            });  
        } else {          
            series.remove();
        }                
        console.log(metric);
    }
});  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌辣 2025-01-12 11:45:29

我不确定我是否正确理解您,但根据您的代码,此函数在 ViewModel 范围中声明:

function(chart){

因此您可以访问区域数组和可观察的指标数组,如下所示:

var data = self.areas[0 ].metrics;

或可观察的指标数组,如

self.metrics()

在任何情况下,在遇到麻烦的行,您都在 ViewModel 范围内,并且可以访问其中您想要的任何内容通过这个自我

I'm not sure I understand you correctly, but according your code, this function declared in the ViewModel scope:

function(chart){

so you can access access both areas array and you observable metrics array like this:

var data = self.areas[0].metrics;

or observable metrics array like

self.metrics()

in any case, at the line where you have troubles, you are in ViewModel scope and can access whatever you want in it by this or self

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文