2016-08-18 72 views
1

作爲我的問題Dart JS Library, how to pass callback functions的後續,我想確保傳遞給D3的任何函數都有正確的參數。Dart Js-Interop函數類型參數

所以我想這樣做以下:當我調用該方法

@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 line = new Line(); 
line.x(
    allowInterop(
     (List<num> d, num i, List<List<num>> data) { 
      return d[0]+10; 
     } 
    ) 
); 

我想它抱怨,如果該參數不正確匹配,例如,

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; 
     } 
    ) 
); 

這將拋出正確的錯誤。但我想知道是否有更好的方法來做到這一點。

回答