2016-08-18 8 views
1

私の質問Dart JS Library, how to pass callback functionsのフォローアップとして、D3に渡された関数が正しいパラメータを持つようにしたいと思います。Dart Js-Interop関数タイプのパラメータ

Line line = new Line(); 
line.x(
    allowInterop(
     (List<num> d, num i, List<List<num>> data) { 
      return d[0]+10; 
     } 
    ) 
); 

私はパラメータが適切に一致していない場合、それは文句を言うしたい:私はメソッドを呼び出すときに

@JS('d3') 
library d3; 

import 'dart:js'; 
import "package:js/js.dart"; 

typedef num D3AccessorFunction(List<num> d, num i, List<List<num>> data); 


@JS('line') 
class Line { 
    external Line(); 
    external String call (List<List<num>> data); 
    external Line x(D3AccessorFunction func); 
    external Line y(num func(List<num> d, num i, List<List<num>> data)); 
} 

だから私は、次のような何かをしたいと思いますたとえば、

line.x(
    allowInterop(
     (List<num> d) { 
      return d[0]+10; 
     } 
    ) 
); 

残念ながら、allowInteropはこの苦情を呑み込むことはできません それを取り除きます。 私は回避策(D3定義で)作成した:

Function d3Function(D3AccessorFunction function) { 
    return allowInterop(function); 
} 

は、その後、私はこのようにそれを呼び出す:右のエラーをスローします

line.x(
    d3Function(
     (List<num> d, num i, List<List<num>> data) { 
      return d[0]+10; 
     } 
    ) 
); 

。しかし、これを行うより良い方法があるかどうかを知りたいと思います。

答えて

0

Dartには、TypeScriptファイルからそうするためのツールがあるので、独自のJavaScript定義ファイルを定義する必要はなくなりました。 JS Facade Generatorofficial Dart Page about JS Interoperabilityにこれを使用する方法の詳細があります。

DefinitelyTyped projectのおかげで、ほぼ確実にこれを実行できるタイプスクリプトファイルがあります。そうでない場合は、代わりにそれらの1つを書いてください。これは、DartとTypeScriptの両方のコミュニティに役立ちます。