2013-03-27 3 views
12

Я немного новичок, чтобы стрелять, и пытаясь намочить ноги, написав в нем некоторые библиотечные функции.Expose Dart функции для javascript

Хотя у меня не было проблем с вызовом javascript-функций из дротика, мне бы хотелось, чтобы вы могли вызывать функции дрока из javascript, но до сих пор я не очень люблю.

Например, я хотел бы быть в состоянии раскрыть некоторые основные функции от дротика, например, вот так:

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

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

и затем иметь возможность вызывать их из JavaScript, например, так:

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

Возможно ли что-то подобное?

+0

Смотрите также http://stackoverflow.com/questions/33174508/is-there-a-better -tot-to-make-a-method-of-a-dart-class-callable-from-js-with-the –

ответ

9

Нет проблем! см. Calling Dart from JavaScript.

В вашем случае:

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

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

Спасибо! Это работало как шарм! –

+0

и вдруг это не работает: утверждает, что в «Прокси» нет такого сеттера «foo» ... –

+0

Вы пытались обновить зависимости? –

1

В Dart 1.20 я должен был добавить allowInterop()

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

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

это хорошо работает в родном dart (dartium), но не в js скомпилированной версии (chrome, ff, ie ..). Проверьте этот снимок экрана (http://data.itpro.cz/dart_js.png). Когда я удаляю allowInterop, он работает даже в js-компиляционной версии. Я использую Dart 1.19.1. Это что-то, что было исправлено в 1.20? –

+0

Казалось, что работа для меня в Chrome и Dartium. Я еще раз проверю и отправлю отчет. –

+0

Проверено снова, и я могу подтвердить, что он работает в Dartium и Chrome. –

Смежные вопросы