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

Vaadin14 Polymer组件调用this.dispatchEvent报not a function错误求助

问题原因

你在map.on(L.Draw.Event.CREATED)的回调中使用了普通匿名函数,此时函数内部的this指向Leaflet的Map实例,而非你定义的LeafletMap自定义元素实例,因此找不到dispatchEvent方法。

解决方案

有两种常用修复方式:

方式1:使用箭头函数替换普通回调函数

箭头函数会继承外层作用域的this指向,直接指向你的Polymer元素实例,修改后的回调代码如下:

map.on(L.Draw.Event.CREATED, (e) => {
    console.log('ON MAP CREATED, draw element');
    console.log(e);
    const type = e.layerType,
          layer = e.layer;
 
    if (type === 'marker') {
        // 执行marker专属逻辑
    }
    
    this.dispatchEvent(new CustomEvent('draw-end', {detail: {type: type}}));
    map.addLayer(layer);
});

方式2:提前存储自定义元素实例的指向

在回调外层先把this赋值给临时变量,回调内用该变量调用dispatchEvent:

// 在ready方法内、map.on代码前存储this指向
const self = this;
map.on(L.Draw.Event.CREATED, function (e) {
    console.log('ON MAP CREATED, draw element');
    console.log(e);
    const type = e.layerType,
          layer = e.layer;
 
    if (type === 'marker') {
        // 执行marker专属逻辑
    }
    
    self.dispatchEvent(new CustomEvent('draw-end', {detail: {type: type}}));
    map.addLayer(layer);
});

两种方式任选其一即可修复报错,正常触发自定义事件。

内容的提问来源于stack exchange,提问作者Sergiu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:54:00