【发布时间】:2022-12-03 19:55:18
【问题描述】:
我想根据不同的条件在单个页面上绘制 5 个图形。实际上,我正在使用循环并每次发送不同的数据,并根据该条件创建一个图表。但是不知道为什么库 d3.js 最后只触发绘制函数并根据最后一个条件创建单个图形。我也在使用 apache wicket 框架
I call the function 5 time using a loop and send different data
final def rawData(id:String): String = {
s"""
require(["renderer"], function (renderer) {
renderer.init("#${id}");
var data = 'digraph g {\\n ${data.attributes.trim} \\n' +
${if (nodes.isEmpty) "''" else nodes} +
${if (links.isEmpty) "''" else links} +
'}';
const getData = async() => {
await renderer.render(data);
}
getData();
});
"""
}
Upper function trigger the below function but in below function init function is call each time and set the data in javascript . Also render function is also call each time but it is not going to ready stage each time it is going in pending and in last it trigger the ready stage and draw the last graph only.
define('renderer',["stage", "worker!layout-worker.js"], function(stage, worker) {
var initialized = false, pending, errorCallback, renderCallback;
var bool =false;
worker.onmessage = function (event) {
switch (event.data.type) {
case "ready":
initialized = true;
if (pending) {
worker.postMessage(pending);
}
break;
case "stage":
stage.draw(event.data.body);
console.log("stage =================> ",event.data.type);
renderCallback && renderCallback();
break;
case "error":
if (errorCallback) {
errorCallback(event.data.body);
}
}
};
return {
init: function(element) {
return stage.init(element);
},
render: function(source) {
if (initialized) {
worker.postMessage(source);
} else {
pending = source;
}
},
stage: stage,
errorHandler: function(handler) {
errorCallback = handler;
},
renderHandler: function(handler) {
renderCallback = handler;
}
};
});
require(/*{
baseUrl: "."
},*/
["transformer"],
function(transformer) {
onmessage = function(event) {
try {
var result = transformer.generate(event.data);
postMessage({
type: "stage",
body: result
});
} catch (e) {
postMessage({
type: "error",
body: e
});
}
};
postMessage({
type: "ready"
});
}
);
【问题讨论】:
标签: javascript scala d3.js wicket d3.js-lasso