2012-03-12 76 views
5

我正在嘗試創建圖表生成器。我有一個用戶輸入標題和圖例的位置。我希望用戶輸入標題,以及何時點擊(模糊)圖表以更新他們輸入的內容。用戶更新標籤後呈現Highcharts

問題是圖表呈現第一次,但我永遠不能再獲取字符渲染。以下是代碼的簡要概述。

$('#legendlocation-select').blur(function updateChartLegend(){ 
console.log($('#legendlocation-select').val()); 
if($('#legendlocation-select').val()==='none'){ 
    chartData.legend.enabled = 'false'; 
}else{ 
    chartData.legend.enabled = 'true'; 
    chartData.legend.align = $('#legendlocation-select').val(); 
} 
renderChart(); 
}); 
function renderChart(){ 
if(chart == undefined){ 
    console.log("First Draw"); 
    chart = new Highcharts.Chart(chartData); 
}else{ 
    console.log("Redraw"); 
    chart.destroy(); 
    chart = new Highcharts.Chart(chartData); 
    chart.redraw(); 
} 
}; 

圖表使得第一時間,然後僅僅是一個空白白色區域的第二次。有任何想法嗎? chartData是一個變量,其中包含所有可正確呈現的選項。

這裏是一個的jsfiddle顯示想通了問題的問題http://jsfiddle.net/zVjrb/3/

+0

要使用相同的數據做到以下幾點。修改chart.options部分。然後將其傳入高層圖。 var chart = Highcharts.chart(chart.options) – Sean 2012-03-12 14:55:17

回答

10

。詳細在這裏:http://highslide.com/forum/viewtopic.php?f=12&t=15255

基本上Highcharts.charts函數從原始選項對象清除系列數據。

這是我的工作代碼:

var chart; 
var chartData = { /* you chart data goes here */ }; 
$('#legendlocation-select').blur(function updateChartLegend(){ 
    console.log($('#legendlocation-select').val()); 
    if($('#legendlocation-select').val()==='none'){ 
    chart.options.legend.enabled = false; 
    }else{ 
    chart.options.legend.enabled = true; 
    chart.options.legend.align = $('#legendlocation-select').val(); 
    } 
    renderChart(); 
}); 

function renderChart(){ 
    //console.log(chartData); 
    if(chart == undefined){ 
    console.log("First Draw"); 
    chart = new Highcharts.Chart(chartData); 
    }else{ 
    console.log("Redraw"); 
    chart.options.chart.animation = false; 
    chart = new Highcharts.Chart(chart.options); 
    chart.render(); 
    } 
}; 
+2

將一個高圖加載到jquery-ui對話框時,我遇到了類似的問題 - 我最終通過清除對話框div來具體調用$('。highcharts-container')來解決這個問題。 .removeClass()。希望這可以幫助別人,並節省他們一小時左右的時間浪費在我身上。 – Ross 2013-01-28 23:00:31