Leaflet: ES6 this.callInitHooks ist keine Funktion

Erstellt am 29. Dez. 2016  ·  8Kommentare  ·  Quelle: Leaflet/Leaflet

  • [x] Ich melde einen Fehler und bitte nicht um Hilfe
  • [ ] Ich habe mir die Dokumentation angesehen , um sicherzustellen, dass das Verhalten dokumentiert und erwartet wird
  • [ ] Ich bin mir sicher, dass dies ein Problem mit dem Leaflet-Code ist, kein Problem mit meinem eigenen Code oder dem von mir verwendeten Framework (Cordova, Ionic, Angular, React…)
  • [ ] Ich habe die Probleme durchsucht, um sicherzustellen, dass sie noch nicht gemeldet wurden

So reproduzieren Sie

  • Broschürenversion, die ich verwende:
  • Browser (mit Version) Ich verwende:
  • Betriebssystem/Plattform (mit Version) Ich verwende:
  • Schritt 1
  • Schritt 2

Welches Verhalten erwarte ich und welches Verhalten sehe ich

Minimalbeispiel, das das Problem reproduziert

  • [ ] dieses Beispiel ist so einfach wie möglich
  • [ ] Dieses Beispiel basiert nicht auf Code von Drittanbietern

Verwenden Sie http://playground-leaflet.rhcloud.com/ oder eine andere jsfiddle-ähnliche Site.

Hilfreichster Kommentar

Nur für den Fall, dass jemand den gleichen Fehler hat, anstatt

var positron = L.TileLayer(...)

du solltest schreiben:

var positron = new L.TileLayer(...)

Das neue Keyword fehlt in deinem Playground-Link @pcrombach

Alle 8 Kommentare

Ich habe versucht, die neueste Version von Merkblatt 1.02 in einer App zu verwenden. Leaflet 1.0.2 funktioniert problemlos, wenn ich die App in reinem Javascript baue. Use Leaflet 1.0.2 in einer Typescript-App bricht ab mit: this.callInitHooks ist keine Funktion, sobald ich ein Control-Plugin wie GeoSearch zur Karte hinzufüge.

Ist Merkblatt 1.0.2 ES6 / Typescript kompatibel?

Es sollte Sie nichts Besonderes daran hindern, Leaflet mit TypeScript (es gibt Definitionen dafür: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/leaflet/index.d.ts) und ES6 zu verwenden.

Fühlen Sie sich frei, ein Beispiel auf http://playground-leaflet.rhcloud.com/ , jsfiddle oder ähnlichem bereitzustellen, wenn Sie der Meinung sind, dass ein bestimmtes Problem mit Leaflet dies verhindert.

Du liegst absolut richtig. Auch ich habe keine Probleme, Leaflet in meiner App mit Typescript zu verwenden. Es sind nur die Plugins, die nicht funktionieren.
Beim Ausführen der Plugins kann kookinit() nicht gefunden werden.

Op 3 Jan. 2017, om 14:57 heeft Per Liedman [email protected] het volgende geschreven:

Es sollte Sie nichts Besonderes daran hindern , Leaflet mit TypeScript zu verwenden (es gibt Definitionen dafür: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/leaflet/index.d.ts

Fühlen Sie sich frei, ein Beispiel auf http://playground-leaflet.rhcloud.com/ http://playground-leaflet.rhcloud.com/ , jsfiddle oder ähnlichem bereitzustellen, wenn Sie der Meinung sind, dass ein bestimmtes Problem mit Leaflet dies verhindert.


Sie erhalten dies, weil Sie den Thread verfasst haben.
Antworten Sie direkt auf diese E-Mail, zeigen Sie sie auf GitHub https://github.com/Leaflet/Leaflet/issues/5224#issuecomment-270119252 an oder schalten Sie den Thread stumm https://github.com/notifications/unsubscribe-auth/AAZlpz5axhLON3LzzdbHZIgG4DYx4- Gnks5rOlPMgaJpZM4LXtMC .

Ich denke, Sie sollten ein Problem mit dem fraglichen Plugin melden. Leider hat das Leaflet-Team nur begrenzte Einblicke in Plugins anderer Autoren und auch unsere Zeit und unsere Ressourcen hindern uns daran, Probleme außerhalb des Kerns von Leaflet zu beheben.

Ich weiß nicht, ob das hilft, aber ich hatte gerade das gleiche Problem. Aber es war mein Fehler. Ich habe L.TilelLayer aufgerufen und nicht L.tileLayer() , vielleicht fügen Sie dies der Dokumentation als häufige Fehler hinzu:-( siehe auch https://github.com/mWater/offline-leaflet-map/issues/18

Nur für den Fall, dass jemand den gleichen Fehler hat, anstatt

var positron = L.TileLayer(...)

du solltest schreiben:

var positron = new L.TileLayer(...)

Das neue Keyword fehlt in deinem Playground-Link @pcrombach

Nur um das Problem deutlich zu machen - Leaflet verwendet Klassen und hat auch Factory-Methoden zum Erstellen neuer Objekte. Die Klassen werden großgeschrieben und müssen mit new aufgerufen werden, während die Factory-Methoden kleingeschrieben sind und nicht sollten. Die Dokumentation verwendet Factory-Methoden, daher kann ich nicht sagen, ob die direkte Instanziierung von Klasseninstanzen unterstützt wird, obwohl die Factorys sowieso einfach new aufrufen. Die folgenden sind daher gleichwertig, obwohl nur die erste dokumentiert ist.

// Small t, calling factory method 
const positron = L.tileLayer(...); 

// Capital T, instantiating a new instance directly 
const positron = new L.TileLayer(...);

Das gleiche Problem besteht auch bei Reagieren

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen