Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向javascript公开Dart函数_Dart_Dart Js Interop - Fatal编程技术网

向javascript公开Dart函数

向javascript公开Dart函数,dart,dart-js-interop,Dart,Dart Js Interop,我对dart有点生疏,试图通过在其中编写一些库函数来让我的脚湿润 虽然我从dart调用javascript函数没有问题,但我希望能够从javascript调用dart函数,但到目前为止,我没有太多类似的功能 例如,我希望能够公开dart的一些基本功能,例如: main(){ 字符串foo(){ 返回“酒吧!”; } js.scoped(){ js.context.foo=foo; }); } 然后可以从javascript调用它们,如下所示: window.onload=函数(){ 警报(“

我对dart有点生疏,试图通过在其中编写一些库函数来让我的脚湿润

虽然我从dart调用javascript函数没有问题,但我希望能够从javascript调用dart函数,但到目前为止,我没有太多类似的功能

例如,我希望能够公开dart的一些基本功能,例如:

main(){
字符串foo(){
返回“酒吧!”;
}
js.scoped(){
js.context.foo=foo;
});
}
然后可以从javascript调用它们,如下所示:


window.onload=函数(){
警报(“foo()=”+foo());
}
这样的事情可能吗?

没问题!看

就你而言:

将'dart:js'导入为js;
main(){
字符串foo(){
返回“酒吧!”;
}
js.context['foo']=foo;
}

在Dart 1.20中,我必须添加
allowinetop()


在Dart 2.3.0中,为了让
allowinetop
玩得更好,我不得不稍微调整一下解决方案


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

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


突然,它不起作用了:声称“在‘Proxy’中没有这样的setter‘foo’”…是:)js的第一次更新到了0.19,但仍然不起作用。在重新编辑和第二次更新之后,我得到了0.20,一切又恢复了。再次感谢!链接文档“从JavaScript调用Dart”中未提及回调。它被删除了吗?是的,答案已经过时了。现在推荐的方法是什么?另请参阅,这在本机dart(dartium)中效果很好,但在js编译版本(chrome、ff、ie…)中效果不佳。请检查这个。当我删除Allowinetop时,它甚至可以在js编译版本中工作。我正在使用Dart 1.19.1。它是不是在1.20中被修复了?在Chrome和Dartium中似乎对我有效。我会再次检查并报告。再次检查后,我可以确认它在Dartium和Chrome中工作。谢谢验证。我试图创建一个空的示例聚合项目,只包含上面截图中的代码,但它不适合我使用Allowinetop(在Dartium中有效,但在IE、FF、Chrome中无效)。我在多台计算机上的多个浏览器中进行了测试。如果愿意,您可以自己测试:。当您在Chrome中按F12并键入:foo()时,您将得到一个错误,如果您键入foo2(),它将写入“bar2!”

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

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