我目前正在使用 https://developers.arcgis.com/javascript/latest/sample-code/custom-lv-masking/ 作为指导,在 Typescript 中编写自定义图层和自定义 LayerView。
为了使用正确的 Typescript 类,我将示例代码拆分为类 CustomLayer 和 CustomLayerView2D 以及扩展的 BaseLayerView2D。在处理函数中我有以下代码
const projectionPromise = projection.load();
const layer = this.layer as CustomLayer;
if (!layer.geometry) {
this.projectedGeometry = null;
this.needsImageUpdate = true;
this.requestRender();
return;
}
if (geometry !== oldGeometry) {
projectionPromise.then(() => {
this.projectedGeometry = projection.project(
layer.geometry,
layer.tileInfo.spatialReference,
projection.getTransformation(layer.geometry.spatialReference, layer.tileInfo.spatialReference)
);
this.needsImageUpdate = true;
this.requestRender();
});
} else {
this.needsImageUpdate = true;
this.requestRender();
}
每次调用 this.requestRender() 时都会收到错误,指出 BaseLayerView2D 显示未设置。
所以我尝试调用 super.initialize() 来设置显示,但随后出现错误,指出 BaseLayerView2D 容器中未设置。我该如何设置容器或者我做错了什么?
事实证明,尝试将 Esri 示例强制放入 TypeScript 类中导致了该错误。将示例导出为 lambda 函数(从原始示例中删节)是有效的。