You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grafana插件开发:Datamap无法作为构造函数使用的问题求助

解决Grafana插件中Datamap不是构造函数的问题

看起来你遇到的核心问题是没有正确从datamaps模块中获取到Datamap构造函数,加上代码里还有一个DOM元素ID的小疏忽,导致了这个错误。我来一步步帮你解决:

1. 修正Datamap的导入与赋值

Grafana使用SystemJS管理模块,你的System.register声明里虽然导入了./datamaps,但并没有正确从模块中提取Datamap构造函数。修改你的导入代码如下:

System.register(['app/plugins/sdk', 'lodash','./datamaps'], function (_export, _context) {
  var PanelCtrl, _, datamapsModule, _createClass, panelDefaults, DoMapCtrl, Datamap;

  return {
    setters: [
      // 处理sdk模块
      function (sdk) {
        PanelCtrl = sdk.PanelCtrl;
      },
      // 处理lodash模块
      function (lodash) {
        _ = lodash;
      },
      // 接收datamaps模块对象
      function (datamaps) {
        datamapsModule = datamaps;
      }
    ],
    execute: function () {
      // 兼容datamaps不同的导出形式,获取构造函数
      Datamap = datamapsModule.default || datamapsModule.Datamap || datamapsModule;

      // 保留你原有的类方法逻辑
      _createClass(DoMapCtrl, [
        { key: 'updateDoMap', value: function updateDoMap() {
            console.log("update: ",this.panel.foo);
            // 统一DOM元素ID的判断与使用
            var mapContainer = document.getElementById('basic');
            if(mapContainer){
                new Datamap({ element: mapContainer });
            }
            this.nextTickPromise = this.$timeout(this.updateDoMap.bind(this), 1000);
          }
        },
        { key: 'onRender', value: function onRender() { 
            console.log("onRender");
          }
        }
      ]);
    }
  };
});

2. 修正DOM元素ID的不一致问题

你原来的代码里判断的是document.getElementById('container'),但创建Datamap时却用了document.getElementById("basic"),这会导致元素判断和实际使用不匹配,可能跳过Datamap创建或者找不到目标元素。上面的代码已经统一为basic,你可以根据实际HTML中的元素ID调整。

3. 确认datamaps的依赖是否加载

Datamaps依赖D3.js,你需要确保D3已正确加载到Grafana环境中:

  • 如果是将datamaps和D3放在插件目录下,要确保D3脚本在datamaps之前加载
  • 如果是通过npm安装依赖,要在插件的plugin.json里声明对D3的依赖,或者在SystemJS配置中正确映射D3的路径

错误原因解析

当使用System.register导入模块时,必须通过setters数组接收每个导入的模块对象,再从中提取需要的导出。你之前只声明了Datamap变量但未赋值,导致它为undefined,自然会触发“不是构造函数”的报错。

内容的提问来源于stack exchange,提问作者Matteo Bononi 'peorthyr'

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:54:47