2017-12-10 2 views
0

Dart-CodeRückkehr anonyme JS-Funktion, die von Dart

import 'dart:html' as html; 
import 'dart:js' as js; 
import 'package:js/js.dart'; 

void main() { 

    var data = new AddLocationData(locationName: "Location1", locationPath: "ThisFolder"); 
    var func =() => data; 
    html.window.console.log(func); 
    html.window.console.log(func()); 
} 

@JS("") 
@anonymous 
class AddLocationData { 
    external String get locationName; 
    external String get locationPath; 
    external factory AddLocationData({String locationName, String locationPath}); 
} 

Sie Javascript Ebene Objekt zurückgibt würde davon ausgehen, dass func eine js Funktion sein wird, aber es ist nicht. Sein Typ/Name ist main_closure. Siehe Screenshot

Screenshot

So die ersten beiden Zeilen von Dart-Code gedruckt wurden dann verwendet, ich Chrome Element Fenster prüfen und rechts angeklickt main_closure' and selected "Store as global variable" which then printed temp1` und dann habe ich es einige Informationen über den generierten Code anzuzeigen.

So ist klar, Dart hat ein Objekt und nicht eine js-Funktion zurückgegeben und so ist der Grund, diese Frage zu stellen. So

Ich mag temp1 eine Funktion statt temp1.call$0 sein, so dass ich die Daten von temp1() Aufruf bekommen und nicht temp1.call$0().

Antwort

2

Siehe js package doc:

Passing Funktionen JavaScript. Wenn Sie eine Dart-Funktion an eine JavaScript-API übergeben, müssen Sie sie mit allowInterop oder allowInteropCaptureThis umbrechen.

+0

Danke 'var func = js.allowInterop (() => Daten);' das Problem behoben: D – adeel41