Here's an example of loading extremely large datasets into the chart by bypassing the component props and directly updating the data of the chart instance.
I'm generating my data here, but it's not hard to imagine using a query instead.
def runAction(self, event):
from java.lang import Math
component = self.parent.parent.getChild("Chartjs")
chart = component.getJavaScriptProxy('chart')
elements = self.view.custom.actions.elements
chunkSize = self.view.custom.actions.chunkSize
chunks = elements / chunkSize
def setState(state):
self.view.custom.actions.state = state
addData = '''(data) => {
const oldData = this.data.datasets[0].data
const newData = oldData.concat(data)
this.data.datasets[0].data = newData
}'''
updateChart = '''() => this.update('none')'''
def getData(index, size):
return [ {
'x': i,
'y': 100 * Math.sin( i / 1000.0)
} for i in range(index, index+size) ]
for index in range(chunks):
setState('Sending chunk %s/%s' % (index, chunks))
data = getData(index*chunkSize, chunkSize)
chart.runBlocking(addData, { 'data': data })
chart.runBlocking(updateChart)
setState('Finished.')
(The chunking code is crude, so what )