2015-10-16 3 views
7

index.html (Kopf)Gibt es eine bessere Möglichkeit, eine Methode einer Dart-Klasse mit dem neuen js 0.6.0-Paket von JS aufrufbar zu machen?

<script> 
    var callDartMethod = function(dartObject) { 
    return dartObject.fullName(); 
    } 
</script> 

index.dart

import 'package:js/js.dart'; 

@Js() // about to being changed to @JS 
external String callDartMethod(p); 

main() { 
    final p = Person.create(firstName: 'Günter', lastName: 'Zöchbauer'); 
    print(callDartMethod(p)); // indirect call from JS 
    // print(p.fullName()); // call from Dart directly 
} 

@Js() // about to being changed to @JS 
class Person { 
    external String get firstName; 
    external set firstName(String firstName); 

    external String get lastName; 
    external set lastName(String lastName); 

    external Function get fullName; 
    external set fullName(Function function); 

    external factory Person({String firstName, String lastName}); 

    static Person create({String firstName, String lastName}) => 
     new Person(firstName: firstName, lastName: lastName) 
     // works but feels a bit cumbersome 
     ..fullName = allowInteropCaptureThis(fullNameImpl); 

    static String fullNameImpl(self) => '${self.firstName} ${self.lastName}'; 
} 
+0

Hallo, Gunter. Ich frage mich, ob der 'fullNameJs'-Getter in deinem Beispiel ein Fehler ist? Sollte es 'externe Funktion sein, fullName;'? –

+0

Ich denke schon. Scheint, ich ändere die Namen in der Mitte, aber nicht überall. Danke für das Aufzeigen :) –

+1

Danke zum Beispiel, ich denke, es wird mir helfen. –

Antwort

2

Kurze Antwort: nein.

pkg/js konzentriert sich derzeit darauf, eine Dart-App JavaScript-Bibliotheken verwenden zu lassen.

Wir möchten es einfacher machen, in Dart geschriebene APIs in JavaScript-Konsumenten zu exportieren, aber das wird später kommen.

Verwandte Themen