Leaflet: ES6 this.callInitHooks 不是函数

创建于 2016-12-29  ·  8评论  ·  资料来源: Leaflet/Leaflet

  • [x] 我正在报告一个错误,而不是寻求帮助
  • [ ] 我查看了文档以确保记录了行为并符合预期
  • [ ] 我确定这是 Leaflet 代码问题,不是我自己的代码问题,也不是我使用的框架(Cordova、Ionic、Angular、React……)
  • [ ] 我已经搜索了问题以确保它尚未报告

如何繁殖

  • 我正在使用的传单版本:
  • 我正在使用的浏览器(带版本):
  • 我正在使用的操作系统/平台(带版本):
  • 第1步
  • 第2步

我期待什么样的行为以及我看到什么样的行为

重现问题的最小示例

  • [ ] 这个例子尽可能简单
  • [ ] 这个例子不依赖任何第三方代码

使用http://playground-leaflet.rhcloud.com/或任何其他类似 jsfiddle 的站点。

最有用的评论

以防万一有人有同样的错误,而不是

var positron = L.TileLayer(...)

你应该写:

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

您的操场链接中缺少新关键字@pcrombach

所有8条评论

我正在尝试在应用程序中使用最新版本的传单 1.02。 如果我用纯 JavaScript 构建应用程序,Leaflet 1.0.2 就没有问题。 在 Typescript 应用程序中使用传单 1.0.2 中断: this.callInitHooks 不是一个函数,只要我向地图添加了像 GeoSearch 这样的控制插件。

传单 1.0.2 ES6 / Typescript 兼容吗?

不应该有什么特别阻止你使用带有 TypeScript 的 Leaflet(有它的定义:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/leaflet/index.d.ts)和 ES6。

如果您认为 Leaflet 有任何特定问题阻止了这一点,请随时在http://playground-leaflet.rhcloud.com/ 、jsfiddle 或类似网站上提供示例。

你是绝对正确的。 我在我的应用程序中通过 Typescript 使用 Leaflet 也没有问题。 它只是不起作用的插件。
运行插件找不到 kookinit()。

一月 3 号 2017 年,om 14:57 heeft Per Liedman [email protected] het volgende geschreven:

不应该有什么特别阻止你使用带有 TypeScript 的 Leaflet(有它的定义: https: //github.com/DefinitelyTyped/DefinitelyTyped/blob/master/leaflet/index.d.ts https://github.com/DefinitelyTyped/DefinitelyTyped/DefinitelyTyped/

如果您认为 Leaflet 有任何特定问题阻止了这一点,请随意在http://playground-leaflet.rhcloud.com/ http://playground-leaflet.rhcloud.com/、jsfiddle或类似网站上提供示例。


您收到此消息是因为您创作了该线程。
直接回复本邮件,在 GitHub 上查看https://github.com/Leaflet/Leaflet/issues/5224#issuecomment-270119252 ,或将线程静音https://github.com/notifications/unsubscribe-auth/AAZlpz5axhLON3LzzdbHZIgG4DYx4- Gnks5rOlPMgaJpZM4LXtMC

我认为您应该对有问题的插件提出问题,不幸的是,Leaflet 团队对其他作者的插件的了解有限,而且我们的时间和资源阻止我们调试 Leaflet 核心之外的问题。

我不知道这是否有帮助,但我遇到了同样的问题。 但这是我的错误。 我打电话给 L.TilelLayer 而不是 L.tileLayer() ,也许将其添加到文档中作为常见错误:-( 另请参见https://github.com/mWater/offline-leaflet-map/issues/18

以防万一有人有同样的错误,而不是

var positron = L.TileLayer(...)

你应该写:

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

您的操场链接中缺少新关键字@pcrombach

只是为了明确问题是什么 - Leaflet 使用类,并且还有用于创建新对象的工厂方法。 这些类是大写的,需要用new调用,而工厂方法是小写的,不应该。 文档使用了工厂方法,所以我不能说是否支持直接实例化类实例,尽管工厂只是简单地调用new 。 因此,以下内容是等效的,但仅记录了第一个内容。

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

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

反应中也存在同样的问题

此页面是否有帮助?
0 / 5 - 0 等级