Dart js-interop和重载方法

时间:2016-07-18 21:39:44

标签: dart dart-js-interop

如何处理具有重载方法的JS库的接口?
例如,Leaflet.js为Map对象定义了以下两个:

openPopup(popup); // opens the given popup
openPopup(html, LatLng, popOptions); // creates a popup with the html at the location, using the popup options.

我想出的是:

@JS("L.Map")
class Map {
   /* code */
   external Map openPopup(dynamic popup, [LatLng coords, PopupOptions opts]);
   /* code */
}

有更好的方法吗?注意:这似乎有效,但分析器抱怨:没有为Map类定义openPopup方法。

飞镖:1.17.1
包:JS-0.6.0

1 个答案:

答案 0 :(得分:1)

到目前为止,我还没有能够使用JS()指令为实例成员/方法指定不同的名称,这是一个很大的问题,特别是对于方法名称与Dart关键字冲突的javascript对象(例如在javascript Promise中“捕获”。我最终使用普通dart:js。无论如何,即使使用package/js,我最终添加了另一个层来使api变得更加狡猾(尤其是回调和承诺),尤其是强制执行参数类型。

我期望能够做到(在你的例子中)

@JS("L.Map")
class Map {
   JS('openPopup')
   external Map openPopupHtml(String html, [LatLng coords, PopupOptions opts]);
   JS('openPopup')
   external Map openPopup(Popup popup);
}

但这似乎不起作用。也许应该将其视为功能增强。