2016-07-18 10 views
1

オーバーロードされたメソッドを持つJSライブラリとのインターフェイスをどのように処理しますか?
たとえばLeaflet.jsは、以下のMapオブジェクトのために定義されたの両方を持っている:私が作ってみた何Dart js-interopおよびオーバーロードされたメソッド

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 */ 
} 

は、より良い方法はありますか?注:これはうまくいくようですが、アナライザーは次のように不平を言います。メソッドopenPopupはクラスマップに対して定義されていません。

ダート:1.17.1
パッケージ:JS-0.6.0

答えて

1

は、これまでのところ、私は特に大きな問題であるJS()ディレクティブを使用してインスタンスメンバー/メソッドに別の名前を指定することができていませんダーツのキーワードと衝突するメソッド名を持つjavascriptオブジェクト(javascript Promiseの 'catch'など)。私は普通の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); 
} 

を行うことができることであろうが、それは動作するようには思えません。たぶんそれは機能拡張として考えられるべきですか?

+1

http://dartbug.com/24779を参照してください。最初は_WontFix_として閉じられましたが、Dart2 \ o/ –

+0

のために最近再考されました@alextk - それも私の期待でした。 –

関連する問題