2013-03-27 14 views
12

Jestem trochę nowicjuszem, aby dart, i próbując zmoczyć moje stopy, pisząc niektóre funkcje biblioteczne w nim.Expose dart funkcje javascript

Podczas gdy nie miałem problemu z wywoływaniem funkcji javascript z dart, chciałbym móc wywoływać funkcje dart z javascript, ale jak na razie nie lubię.

Na przykład, chciałbym, aby móc wystawiać kilka podstawowych funkcji z grotem, na przykład tak:

main() { 
    String foo() { 
    return "bar!"; 
    } 

    js.scoped(() { 
    js.context.foo = foo; 
    }); 
} 

a następnie być w stanie zadzwonić do nich z javascript, tak:

<script> 
    window.onload = function() { 
    alert("foo() = " + foo()); 
    } 
</script> 

Czy coś takiego jest możliwe?

+0

Zobacz również http://stackoverflow.com/questions/33174508/is-there-a-better -wprowadzenie-metody-o-dart-klasy-call-from-js-z- –

Odpowiedz

9

Nie ma problemu! patrz Calling Dart from JavaScript.

W twoim przypadku:

import 'dart:js' as js; 
main() { 
    String foo() { 
    return "bar!"; 
    } 

    js.context['foo'] = foo; 
} 
+0

Dzięki! To działało jak czar! –

+0

i nagle, to nie działa: roszczenia "Nie ma takiego ustawiacza" foo "w" Proxy "" ... –

+0

Czy próbowałeś zaktualizować zależności? –

1

W Dart 1.20 musiałem dodać allowInterop()

import 'dart:js' as js; 
main() { 
    String foo() { 
    return "bar!"; 
    } 

    js.context['foo'] = allowInterop(foo); 
} 
+0

działa to dobrze w rodzimej dart (dartium), ale nie w skompilowanej wersji js (chrome, ff, ie ..). Sprawdź to [zrzut ekranu] (http://data.itpro.cz/dart_js.png). Kiedy usuwam allowInterop, działa nawet w skompilowanej wersji js. Używam Dart 1.19.1. Czy jest to coś, co zostało naprawione w wersji 1.20? –

+0

Wydaje się działać dla mnie w Chrome i Dartium. Sprawdzę ponownie i zgłoś ponownie. –

+0

Sprawdzone ponownie i mogę potwierdzić, że działa w Dartium i Chrome. –