2013-03-27 13 views
12

Sono un po 'un newb da usare e sto cercando di bagnarmi i piedi scrivendo alcune funzioni della libreria.Esporre le funzioni Dart a javascript

Mentre non ho avuto problemi a chiamare le funzioni javascript dal dardo, mi piacerebbe essere in grado di chiamare le funzioni di dardo da javascript, ma finora non mi piacerebbe molto.

Per esempio, mi piacerebbe essere in grado di esporre alcune funzioni di base dal dardo, ad esempio in questo modo:

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

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

e quindi in grado di chiamarli da JavaScript, in questo modo:

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

È qualcosa di simile anche possibile?

+0

Vedi anche http://stackoverflow.com/questions/33174508/is-there-a-better -way-to-make-a-method-of-a-dart-class-callable-da-js-with-the –

risposta

9

Nessun problema! vedi Calling Dart from JavaScript.

Nel tuo caso:

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

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

Grazie! Ha funzionato come un incantesimo! –

+0

e improvvisamente, non funziona: afferma "Non c'è un setter 'foo' in 'Proxy'" ... –

+0

Hai provato ad aggiornare le dipendenze? –

1

In Dart 1.20 ho dovuto aggiungere allowInterop()

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

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

funziona bene nel dardo nativo (dartium) ma non nella versione compilata js (chrome, ff, ie ..). Per favore controlla questo [screenshot] (http://data.itpro.cz/dart_js.png). Quando rimuovo allowInterop, funziona anche nella versione con js compilato. Sto usando Dart 1.19.1. È qualcosa che è stato risolto in 1.20? –

+0

Sembrava funzionare per me in Chrome e Dartium. Controllerò di nuovo e riferirei. –

+0

Controllato di nuovo e posso confermare che funziona in Dartium e Chrome. –

Problemi correlati