2016-07-18 9 views
1

오버로드 된 메서드가있는 JS 라이브러리와의 인터페이싱은 어떻게 처리합니까? 예를 들어
Leaflet.js가 Map 객체에 대해 정의 된 다음의 모두가 있습니다다트 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 나는 특히 큰 문제입니다 JS() 지시어를 사용하여 인스턴스 멤버/방법에 대해 다른 이름을 지정하지 못하고 지금까지

답변

1

다트 키워드와 충돌하는 메서드 이름을 가진 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 - 그건 내 기대였습니다. –