2015-10-16 25 views
7

index.html (testa)C'è un modo migliore per rendere un metodo di una classe Dart callable da JS con il nuovo pacchetto js 0.6.0?

<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

Ciao, Gunter. Mi chiedo se il getter "fullNameJs" nel tuo esempio sia un errore? Dovrebbe essere 'Funzione esterna get fullName;'? –

+0

Credo di si. Sembra che abbia cambiato nome a metà strada, ma non dappertutto. Grazie per avermelo fatto notare :) –

+1

Grazie, per esempio, penso che mi aiuterà. –

risposta

2

Risposta breve: no.

pkg/js è attualmente focalizzato su come consentire a un'app Dart di utilizzare librerie JavaScript.

Vogliamo semplificare l'esportazione di API scritte in Dart in utenti JavaScript, ma ciò avverrà in seguito.