查询事件监听
map.listens(type):boolean采用MapLibre风格,同步查询当前门面或其父事件链是否注册了至少一个监听,不发地图命令或新增订阅。包含普通on、once回调、once Promise等待和图层委托;有效自定义名称没有监听时返回false;名称须为1~128字符,否则报INVALID_ARGUMENT。
const handler=event=>console.log(event.type);
const subscription=map.on('move',handler);
console.log(map.listens('move')); // true
subscription.unsubscribe();
console.log(map.listens('move')); // false
const next=map.once('move');
console.log(map.listens('move')); // true
map.setCenter([116.4,39.9]);
await map.sqs.flush();
await next;
console.log(map.listens('move')); // false
once在调用回调之前移除自己的监听;Promise完成、off或unsubscribe之后同步反映结果。重复on沿用已有去重行为;未加载/不可见图层的已注册委托也计入,查询不会触发要素命中。停止脚本/销毁地图后清空所属监听。
各门面拥有独立表:共同脚本查询本脚本门面及其显式父链;原生持续QuickJS同样如此。直接SDK统计该MapView实例及其显式父链的监听,包含脚本宿主通过SDK注册的内部转发,不汇总另一脚本的私有表。旧GIS门面统计自己的旧事件,不与共同门面混合;原生旧一次性事件入口仍不可用。SDK监听所属realm的状态同步,不等待Worker往返。
同份12项脚本与完整HTML验证实际move、once回调/Promise、解绑、参数错误和图层委托;页面额外包含10项直接SDK/销毁检查。随完整匹配SDK目录运行。自定义事件、fire与父链现已接通,见Evented及其共同24项脚本;图层管理UI仍由应用自行制作。
语法参考MapLibre Evented.listens;SqsMap现已支持显式父事件链的监听查询与转发。