ข้อผิดพลาดขอบเขตไลบรารี LWC Javascript

May 02 2020

ฉันกำลังโหลดไลบรารี Javascript ของบุคคลที่สามใน ConnectCallback ของฉันสำเร็จ:

connectedCallback() {

    Promise.all([
        loadStyle(this, PCMilerCSS), 
        loadScript(this, PCMilerJavascript)
    ])
        .then(() => {
            debugger;
            this.initializeMap();
        })
        .catch(error => {
            debugger;
            LightningUtil.logError(this, error);
        });
}

แต่เมื่อฉันพยายามอ้างอิง:

initializeMap() {        

    ALKMaps.APIKey = this.credentials;
    alkmap = new ALKMaps.Map('map1', { displayProjection: new ALKMaps.Projection("EPSG:4326") });

    // map layers        

    _alkBasemap = new ALKMaps.Layer.BaseMap("ALK Maps", {style: ALKMaps.STYLE[this._baseLayerStyle]}, {displayInLayerSwitcher: false});                                                                                    
    let markerLayer = new ALKMaps.Layer.Markers("Marker Layer", {}, {displayInLayerSwitcher: true});                    
    let routingLayer = new ALKMaps.Layer.Routing("Routing Layer", {}, {displayInLayerSwitcher: true});                                                                                   
    let trafficLayer = new ALKMaps.Layer.Traffic("ALK LiveTraffic™", {}, {minScale: 500000, opacity: 0.5, displayInLayerSwitcher: true});        
    let weatherLayer = new ALKMaps.Layer.WeatherRadar("Radar Weather Layer",   {display: "radar"}, {opacity: 1, visibility: this._showWeatherOnOpen, displayInLayerSwitcher: true});

    alkmap.addLayers([alkBasemap, trafficLayer, weatherLayer, routingLayer, markerLayer]);
    let switcherControl = new ALKMaps.Control.LayerSwitcher();
    alkmap.addControl(switcherControl);

....

มันระเบิดในบรรทัดแรกเพราะไม่พบ ALKMaps:

ReferenceError: ALKMaps ไม่ได้กำหนดไว้ที่ AlkMap.initializeMap

นี่คือส่วนแรกของไลบรารี Javascript ที่มี ALKMaps ด้านหน้าและตรงกลาง JS สับของฉันอ่อนแอแล้วฉันพลาดอะไรไป? เหตุใดจึงไม่สามารถเข้าถึง ALKMaps ขอบคุณสำหรับความช่วยเหลือของคุณ....

var ALKMaps=function(){var a=function(){for(var a=/(^|(.?/))(ALKMaps.js)(\?|$)/i,b=document.getElementsByTagName(" script"),e,f="",g="",h="",i=0,j=b.length;ia.right;)b.lon-=a.getWidth()}return b} ,CLASS_NAME:"ALKmaps.LonLat"}); ALKMaps.LonLat.fromString=function(a){a=a.split(",");return ใหม่ ALKMaps.LonLat(a[0],a[1])};ALKMaps.LonLat.fromArray=function(a) {var b=ALKMaps.Util.isArray(a);ส่งคืน ALKMaps.LonLat(b&&a[0],b&&a[1])};ALKmaps.LonLat.transformArray=function(a,b,c){var d=[ ];if(null!=a&a instanceof Array&&0g,f*g)}this.drawText(a.id,b,d)}else this.removeText(a.id);return c}}},calculateFeatureDx:function(a) ,b){this.featureDx=0;if(b){var c=b.getWidth();this.featureDx=Math.round(((a.left+a.right)/2-(this.extent.) left+this.extent.right)/ 2)/c)*c}},drawGeometry:

คำตอบ

1 sfdcfox May 04 2020 at 07:18

ใน JavaScript สิ่งใดก็ตามที่ไม่ได้วางไว้ในขอบเขตส่วนกลางจะไม่ปรากฏให้เห็นภายนอกไฟล์ นั่นหมายความว่า:

var ALKMaps = ...

กำหนดเฉพาะตัวแปรที่ใช้ในไฟล์ที่รวมไว้เท่านั้น ไม่ใช่ภายนอก

สิ่งที่ทำให้ตัวแปรพร้อมใช้งานคือเมื่อมีการส่งออก (เบราว์เซอร์ที่ทันสมัยทั้งหมด):

export { ALKMaps }

หรือเมื่อเปิดให้ใช้งานทั่วโลก (เข้ากันได้กับ IE):

window.ALKMaps = ALKMaps;

สิ่งหนึ่งที่ต้องเกิดขึ้นเพื่อให้สามารถเข้าถึงเนื้อหาของสคริปต์ได้