我有一個小部件,它指向特定的數據源/ 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