gpt4 book ai didi

dart - 是否可以从Dart定义有效的JavaScript函数?

转载 作者:行者123 更新时间:2023-12-03 02:58:26 24 4
gpt4 key购买 nike

对不起,我的英语不好。
我是Dart语言的新手。我一直在寻找JS和Dart之间进行通信的方法。我想从Dart调用jQueryUI代码。

当我创建jQueryUI的对话框时,HTML和JS代码将如下所示:

HTML代码:

...
<button id="btn1">OPEN</button>
<div id="msg">
Hello, world!
</div>
...

JS代码:

$('#btn').click( function() {
$('#msg').dialog('open');
});

$('#msg').dialog({
autoOpen: false,
buttons: {
"OK": function() {
$(this).dialog('close');
}
},
title: "Dialog",
modal: false,
show: 'fold',
hide: 'puff'
});

因此,我尝试将这些JS代码转换为Dart代码。
但是,当我在下面编写这些测试Dart代码时,在下面出现了错误消息。

Breaking on exception: Closure call with mismatched arguments: function 'call'

Dart 代码:

import 'dart:html';
import 'dart:js' as js;

void dartFunc() {
print("test");
}

void main() {

js.JsObject btn = js.context.callMethod(r'$', ['#btn']);
btn.callMethod('click', [dartFunc]); //-----> ERROR!
//...
}

但是,当我在下面编写JS函数和Dart代码时,错误消失了,程序成功运行了。

JS代码:

function jsFunc() {
console.log("test");
}

Dart 代码:

import 'dart:html';
import 'dart:js' as js;

void dartFunc() {
print("test");
}

void main() {

js.JsObject btn = js.context.callMethod(r'$', ['#btn']);
btn.callMethod('click', [jsFunc]); -----> SUCCESS!
//...
}

为了找出这个问题,我进行了一些测试。
当我从Dart将两个函数(jsFunc()和dartFunc())打印到控制台时,例如

Dart 代码:

...
js.context['dartFunc'] = dartFunc;
print(js.context['jsFunc']);
print(js.context['dartFunc']);
...

结果如下。

function jsFunc() {
console.log("test");
}
function () {
return func(Array.prototype.slice.apply(arguments));
}

显然 print(js.context['dartFunc'])的结果是奇怪的。

有人可以帮忙吗?
是否可以从Dart定义有效的JavaScript函数?

感谢您阅读末尾:)

最佳答案

允许使用与声明数量不同的参数来调用Js函数。这与Dart不同。

基本上,您定义的回调(dartFunc)使用至少一个参数调用,但是该函数不支持参数。您可以简单地将optionnal参数添加到Dart函数。因此错误应消失。

void dartFunc([arg1,arg2,arg3]) {
print("test");
}

现在可以使用0到3个参数调用该函数。

关于dart - 是否可以从Dart定义有效的JavaScript函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22048529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com