我有一个小部件,它指向特定的数据源/ API后呈现一个条形图(HTML/CSS/JavaScript)。有一个配置参数来改变数据源/ API,所以我可以有同一个小部件的多个实例。将同一个小部件的多个实例插入到一个页面中
使用shadow-dom可以做到以上吗?我试着跟随,但注意到小部件无法选择正确的div元素来执行渲染部分。
var host = document.querySelector("#" + gadgetContainer.getAttribute("data-grid-id"));
var root = host.createShadowRoot();
var template = document.createElement('template');
template.innerHTML = gadgetContainer.outerHTML;
root.appendChild(document.importNode(template.content, true));
以下是执行小部件渲染的JavaScript逻辑,为了清晰起见,我已经移除了数据集和配置。
(function() {
"use strict";
//dataset used to plot charts
var dataTable = {}, //REMOVED
width = document.querySelector('*::shadow #bar').offsetWidth,
height = 270, //canvas height
config = {}; //REMOVED
widget.renderer.setWidgetName("bar-chart", "BAR CHART");
chartLib.plot("*::shadow #bar",config, dataTable);
}());
以下是简单的HTML DIV,所有需要的样式表和脚本都没有在这个页面。
<div id="bar" class="bar"></div>
@Supersharp渲染同一窗口小部件的多个实例。 – udarakr
@Supersharp我用更多的代码更新了这个问题。我只使用影子。 – udarakr