2017-12-03 8 views
1

私はJava、Spring、Hibernate、AmCharts Libraryを使ってRESTアーキテクチャとCRUD仮定に基づいてアプリケーションを開発しています。キャンドルチャートのデータをリロードする方法は? AmChart library

しかし、私のプロジェクトでは、AmChartsのキャンドルチャート(株価チャート)にデータを再ロードすることに問題があります。

私のJavaScriptコード:

var request; 
firstDeploy(); 

function firstDeploy() { 
    request = 'http://localhost:8080/v1/crypto/getCandles?currencyPair=tBTCUSD&timeFrame=1D'; 
} 

var candleChart = AmCharts.makeChart("chartdiv", { 
    type: "stock", 

    dataSets: [{ 
    fieldMappings: [{ 
     fromField: "open", 
     toField: "open" 
    }, { 
     fromField: "close", 
     toField: "close" 
    }, { 
     fromField: "high", 
     toField: "high" 
    }, { 
     fromField: "low", 
     toField: "low" 
    }, { 
     fromField: "volume", 
     toField: "volume" 
    }, { 
     fromField: "value", 
     toField: "value" 
    }], 

    color: "#7f8da9", 
    dataLoader: { 
     url: request, 
     format: 'json' 
    }, 
    title: "tBTCUSD", 
    categoryField: "date" 
    }], 


    panels: [{ 
     title: "Value", 
     showCategoryAxis: false, 
     percentHeight: 70, 
     valueAxes: [{ 
     id:"v1", 
     dashLength: 5 
     }], 

     categoryAxis: { 
     dashLength: 5 
     }, 

     stockGraphs: [{ 
     type: "candlestick", 
     id: "g1", 
     openField: "open", 
     closeField: "close", 
     highField: "high", 
     lowField: "low", 
     valueField: "close", 
     lineColor: "#7f8da9", 
     fillColors: "#7f8da9", 
     negativeLineColor: "#db4c3c", 
     negativeFillColors: "#db4c3c", 
     fillAlphas: 1, 
     useDataSetColors: false, 
     comparable: true, 
     compareField: "value", 
     showBalloon: false 
     }], 

     stockLegend: { 
     valueTextRegular: undefined, 
     periodValueTextComparing: "[[percents.value.close]]%" 
     } 
    }, 

    { 
     title: "Volume", 
     percentHeight: 30, 
     marginTop: 1, 
     showCategoryAxis: true, 
     valueAxes: [{ 
     id:"v2", 
     dashLength: 5 
     }], 

     categoryAxis: { 
     dashLength: 5 
     }, 

     stockGraphs: [{ 
     valueField: "volume", 
     type: "column", 
     showBalloon: false, 
     fillAlphas: 1 
     }], 

     stockLegend: { 
     markerType: "none", 
     markerSize: 0, 
     labelText: "", 
     periodValueTextRegular: "[[value.close]]" 
     } 
    } 
    ], 

    chartCursorSettings: { 
    valueLineEnabled:true, 
    valueLineBalloonEnabled:true 
    }, 


    chartScrollbarSettings: { 
    graph: "g1", 
    graphType: "line", 
    usePeriod: "WW", 
    updateOnReleaseOnly:false 
    }, 

    periodSelector: { 
    position: "bottom", 
    periods: [{ 
     period: "DD", 
     count: 10, 
     label: "10 days" 
    }, { 
     period: "MM", 
     selected: true, 
     count: 1, 
     label: "1 month" 
    }, { 
     period: "YYYY", 
     count: 1, 
     label: "1 year" 
    }, { 
     period: "YTD", 
     label: "YTD" 
    }, { 
     period: "MAX", 
     label: "MAX" 
    }] 
    } 
}); 

$(options) 

function options() { 
    var handler = handleDropdown(handleResults) 
    handler('#time-frame-list', 'time') 
    handler('#currency-pair-list', 'currency') 

} 

function handleResults(results) { 
    var mainRequest = 'http://localhost:8080/v1/crypto/getCandles?currencyPair=t'; 
    var resultsArray = JSON.stringify(results); 
    var currencyPair = resultsArray.substr(25,6); 
    var timeFrame = resultsArray.substr(9,2); 
    request = mainRequest + currencyPair + '&timeFrame=' + timeFrame; 
    candleChart.dataLoader.url = request; 
    candleChart.dataLoader.loadData(); 
    console.log(request); 
} 

function handleDropdown(handler) { 
    var options = {} 

    return function(selector, key) { 
    options[key] = $(selector).val() 
    $(selector).change(function(event) { 
     options[key] = this.options[event.target.selectedIndex].value 
     handler(options) 
    }) 
    } 
} 

私のHTMLコード:

<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 
    <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
     <title>amStock Example</title> 
     <link rel="stylesheet" href="style.css"> 
     <script src="amcharts.js" type="text/javascript"></script> 
     <script src="serial.js" type="text/javascript"></script> 
     <script src="amstock.js" type="text/javascript"></script> 
     <script src="dataloader.min.js" type="text/javascript"></script> 
     <script src="jquery-3.2.1.min.js" type="text/javascript"></script> 
    <script src="cryptoscript.js" type="text/javascript"></script> 
</head> 
<body style="background-color:#FFFFFF"> 
<center> 
<div class="chart-background"> 
    <div class="drop-down-menus"> 
    <div class="time-frame-dropdown"> 
     <select id="time-frame-list"> 
     <option value="1D" selected>1D</option> 
     <option value="1h">1H</option> 
     </select> 
    </div> 
    <div class="currency-pair-dropdown"> 
     <select id="currency-pair-list"> 
     <option value="BTCUSD" selected>BTCUSD</option> 
     <option value="ETHUSD">ETHUSD</option> 
     </select> 
    </div> 
    </div> 
    </div> 
     <div id="chartdiv" class="chart-candle" style="width:50%; height:600px;"></div> 
    </div> 
</center> 
</body> 

</html> 

マイRestController:

@RestController 
@RequestMapping("v1/crypto") 
public class CandleRestController { 

    @Autowired 
    private DbService service; 

    @Autowired 
    private CandleMapper candleMapper; 


    @RequestMapping(method = RequestMethod.GET, value = "getCandles") 
    public CandleDtoCharts[] getCandleList(@RequestParam String currencyPair, @RequestParam String timeFrame) { 
     System.out.println(currencyPair + " " + timeFrame); 
     return candleMapper.mapToCandleDtoChartsList(service.getCandlesByCurrencyPairAndTimeFrame(currencyPair, timeFrame)); 
    } 
} 

は、私は私のRestControllerはすべての時間を同じ「要求を受信して​​いることを知っています"(url)他の通貨ペア/時間枠を選択した後、私は理由を知らないのですか?

答えて

0

dataSetの中にdataLoader urlを更新する必要があります。チャートレベルで更新していますが、これは株価チャートでは機能しません。

candleChart.dataLoader.url = request; //this doesn't work in a stock chart 
candleChart.dataSets[0].dataLoader.url = request; //this does. 
+1

作品:Dありがとうございます!私は数日間のソリューションを見つけることを試みていた...今私は前進することができます:) – Olsson

関連する問題