Leaflet: ES6 this.callInitHooks n'est pas une fonction

Créé le 29 déc. 2016  ·  8Commentaires  ·  Source: Leaflet/Leaflet

  • [x] Je signale un bug, je ne demande pas d'aide
  • [ ] J'ai consulté la documentation pour m'assurer que le comportement est documenté et attendu
  • [ ] Je suis sûr que c'est un problème de code Leaflet, pas un problème avec mon propre code ni avec le framework que j'utilise (Cordova, Ionic, Angular, React…)
  • [ ] J'ai parcouru les problèmes pour m'assurer qu'ils n'ont pas encore été signalés

Comment reproduire

  • Version de la brochure que j'utilise :
  • Navigateur (avec version) que j'utilise :
  • OS/Plateforme (avec version) que j'utilise :
  • étape 1
  • étape 2

Quel comportement j'attends et quel comportement je vois

Exemple minimal reproduisant le problème

  • [ ] cet exemple est aussi simple que possible
  • [ ] cet exemple ne repose sur aucun code tiers

En utilisant http://playground-leaflet.rhcloud.com/ ou tout autre site similaire à jsfiddle.

Commentaire le plus utile

Juste au cas où quelqu'un aurait la même erreur, au lieu de

var positron = L.TileLayer(...)

tu devrais écrire :

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

Le nouveau mot-clé est manquant dans votre lien de terrain de jeu @pcrombach

Tous les 8 commentaires

J'essayais la dernière version de la notice 1.02 à utiliser dans une application. Leaflet 1.0.2 fonctionne sans problème si je construis l'application en javascript simple. Utiliser la brochure 1.0.2 dans une application Typescript rompt avec : this.callInitHooks n'est pas une fonction dès que j'ajoute un plugin de contrôle comme GeoSearch à la carte.

La notice 1.0.2 ES6 / Typescript est-elle compatible ?

Rien ne devrait vous empêcher d'utiliser Leaflet avec TypeScript (il existe des définitions pour cela : https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/leaflet/index.d.ts) et ES6.

N'hésitez pas à fournir un exemple sur http://playground-leaflet.rhcloud.com/ , jsfiddle ou similaire si vous pensez qu'il y a un problème particulier avec Leaflet qui empêche cela.

Tu as tout à fait raison. Moi non plus, je n'ai aucun problème à utiliser Leaflet dans mon application avec Typescript. Ce sont juste les plugins qui ne fonctionnent pas.
l'exécution des plugins ne peut pas trouver kookinit().

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

Rien ne devrait vous empêcher d'utiliser Leaflet avec TypeScript (il existe des définitions pour cela : https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/leaflet/index.d.ts https://github .com/DefinitelyTyped/DefinitelyTyped/blob/master/leaflet/index.d.ts ) et ES6.

N'hésitez pas à fournir un exemple sur http://playground-leaflet.rhcloud.com/ http://playground-leaflet.rhcloud.com/ , jsfiddle ou similaire si vous pensez qu'il y a un problème particulier avec Leaflet qui empêche cela.

-
Vous recevez ceci parce que vous avez créé le fil.
Répondez directement à cet e-mail, consultez-le sur GitHub https://github.com/Leaflet/Leaflet/issues/5224#issuecomment-270119252 , ou coupez le fil https://github.com/notifications/unsubscribe-auth/AAZlpz5axhLON3LzzdbHZIgG4DYx4- Gnks5rOlPMgaJpZM4LXtMC .

Je pense que vous devriez signaler un problème avec le plugin en question, malheureusement, l'équipe Leaflet a un aperçu limité des plugins d'autres auteurs, et notre temps et nos ressources nous empêchent également de déboguer des problèmes en dehors du noyau de Leaflet.

Je ne sais pas si cela peut aider, mais je viens d'avoir le même problème. Mais c'était mon erreur. J'appelais L.TilelLayer et non L.tileLayer() , ajoutez peut-être ceci à la documentation en tant qu'erreurs courantes :-( voir aussi https://github.com/mWater/offline-leaflet-map/issues/18

Juste au cas où quelqu'un aurait la même erreur, au lieu de

var positron = L.TileLayer(...)

tu devrais écrire :

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

Le nouveau mot-clé est manquant dans votre lien de terrain de jeu @pcrombach

Juste pour expliciter le problème - Leaflet utilise des classes et possède également des méthodes d'usine pour créer de nouveaux objets. Les classes sont en majuscules et doivent être appelées avec new , tandis que les méthodes d'usine sont en minuscules et ne devraient pas. La documentation utilise des méthodes d'usine, je ne peux donc pas dire si l'instance de classe directement instanciée est prise en charge, bien que les usines appellent simplement new toute façon. Les éléments suivants sont donc équivalents, bien que seul le premier soit documenté.

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

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

le même problème existe aussi dans réagir

Cette page vous a été utile?
0 / 5 - 0 notes